我正在构建一个节点+快速服务器,并使用create-react-app到前端。 我使用passportjs进行auth路由处理,所有的东西都完全在localhost上工作(后端在端口5000上,前端在端口3000上,有代理)。 当我部署到Heroku时,似乎服务器无法识别我的身份验证路由,因此heroku提供静态index.html。 如果我用Postman测试我的API似乎都工作(我可以看到谷歌oauth的html页面),但在我的反应应用程序中使用锚标记或手动在网址中写入端点,我只能看到重新加载相同的页面。
我的服务器index.js:
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)
流速:
LOCALHOST: 应用程序启动 - >我点击了Google登录' - > GET请求" / auth / google" - > google oauth flow - >重定向到" /"并且我的反应应用程序重新出现,用户已登录。
的Heroku: 在my-app.herokuapp.com/上反应应用程序 - >点击" Google登录" - >页面重新加载,没有任何反应。用户未登录。
拜托,伙计们,帮助我。 感谢
答案 0 :(得分:1)
这是默认情况下安装服务工作者以使您的应用成为Progressive Web App
的结果要确定这是否是您的问题,请在隐身模式下测试您的heroku制作模式应用。 / auth / google的请求现在应该到达服务器并且与开发中的行为一样。
确定问题后,您可以删除
import registerServiceWorker from "./registerServiceWorker";
来自/client/src/index.js文件。
您的浏览器缓存可能已包含已安装的服务工作者,因此您可能需要
以编程方式卸载服务器工作程序
import { unregister } from './registerServiceWorker';
....
unregister();
答案 1 :(得分:0)
我有完全相同症状的相同问题。
对我而言,原因是键中的拼写错误:在server/config/prod.js
中我读了一行cookieKey: process.env.COOKIE_KEY
,但在Heroku Config变量中,变量名为cookieKey
。在Heroku中将其重命名为COOKIE_KEY
解决了这个问题。
答案 2 :(得分:0)
如果您已经阅读了Stephen Grider的教程,我想知道的一件事是:您的password.js文件位于配置文件还是服务中?我看您是用index.js写的:require('./config/passport')
而index.js中的我是require('./services/passport')
可能不是您解决生产中挂起的Google oauth流的方法,但可能会有所帮助。