Node.js Heroku节点+;react应用程序:未处理锚标记身份验证请求
我正在构建一个node+express服务器,前端有CreateReact应用程序。 我使用passportjs进行身份验证路由处理,所有的东西都完全在本地主机上工作(后端在端口5000上,前端在端口3000上,带有代理)。 当我部署到Heroku时,服务器似乎无法识别我的身份验证路由,因此Heroku提供static index.html。 如果我用Postman测试我的API似乎都能正常工作(我可以看到GoogleOAuth的html页面),但是在我的react应用程序中有一个锚定标记或者在url中手动写入端点,我只能看到相同的页面重新加载 My server index.js:Node.js Heroku节点+;react应用程序:未处理锚标记身份验证请求,node.js,reactjs,express,heroku,Node.js,Reactjs,Express,Heroku,我正在构建一个node+express服务器,前端有CreateReact应用程序。 我使用passportjs进行身份验证路由处理,所有的东西都完全在本地主机上工作(后端在端口5000上,前端在端口3000上,带有代理)。 当我部署到Heroku时,服务器似乎无法识别我的身份验证路由,因此Heroku提供static index.html。 如果我用Postman测试我的API似乎都能正常工作(我可以看到GoogleOAuth的html页面),但是在我的react应用程序中有一个锚定标记或者在
const express = require('express')
const passport = require('passport')
const mongoose = require('mongoose')
const path = require('path')
// KEYS
const keys = require('./config/keys')
// MONGOOSE MODELS
require('./models/User')
mongoose.connect(keys.mongoURI)
// PASSPORT SETUP
require('./config/passport')
// CREATE THE SERVER
const app = express()
// EXTERNAL MIDDLEWARES
require('./middlewares/external')(app)
// ROUTE HANDLERS
require('./routes/authRoutes')(app)
// PRODUCTION SETUP
if (process.env.NODE_ENV === 'production') {
// express serve up production assets ( main.js, main.css )
app.use(express.static('client/build'))
app.get('*', (req, res) => {
res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'))
})
}
// START THE SERVER
const PORT = process.env.PORT || 5000
app.listen(PORT)
流量:
本地主机:
react应用程序启动->我单击“谷歌登录”->获取请求到“/auth/Google”->谷歌oauth流->重定向到“/”,我的react应用程序重新出现,用户已登录
希罗库:
在my-app.herokuapp.com/->点击“谷歌登录”->页面重新加载,什么都没有发生。用户未登录
伙计们,帮帮我。
谢谢我也有同样的问题,症状完全一样
对我来说,原因是键的输入错误:在
server/config/prod.js
中,我有一行读着cookieKey:process.env.COOKIE\u KEY
,但在Heroku配置变量中,变量名为cookieKey
。将其重命名为Heroku内部的COOKIE\u KEY
解决了该问题。这是由于默认情况下安装了service worker以使您的应用成为
要确定这是否是您的问题,请在匿名模式下测试您的heroku生产模式应用程序。对/auth/google的请求现在应该到达服务器,并像在开发中一样进行操作
一旦确定这是一个问题,就可以删除
import registerServiceWorker from "./registerServiceWorker";
从/client/src/index.js文件
您的浏览器缓存可能已经包含已安装的service worker,因此您可能必须
import { unregister } from './registerServiceWorker';
....
unregister();
如果您已经学习了Stephen Grider教程,我想知道一件事:您的passport.js文件是配置文件还是服务文件?我看到您已经在index.js中编写了:
require('./config/passport')
而index.js中的我是require('./services/passport')
可能不是您解决生产中挂起的google oauth流的解决方案,但可能会有所帮助。当您处理heroku日志--tail时,您是否看到来自heroku的任何错误?没有错误,我认为oauth有一个“可重定向到的授权url”列表在其仪表板中。您是否有重定向到其中列出的url?我想这就是他们用来重定向回你的应用程序的方法。我也这么想,但是如果我用Postman测试我的“/auth/google”api端点,我可以看到google登录html页面。如果有“可重定向到的授权url”,谷歌会在登录后告诉我,并给出一个正确的错误页面。@DarioIelardi看起来像是你遵循了Stephen Grider的教程,因为我也遇到了同样的问题。你解决问题了吗?非常感谢。它解决了过去一周我试图修复的一个bug。