Node.js Heroku节点+;react应用程序:未处理锚标记身份验证请求

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应用程序中有一个锚定标记或者在

我正在构建一个node+express服务器,前端有CreateReact应用程序。 我使用passportjs进行身份验证路由处理,所有的东西都完全在本地主机上工作(后端在端口5000上,前端在端口3000上,带有代理)。 当我部署到Heroku时,服务器似乎无法识别我的身份验证路由,因此Heroku提供static index.html。 如果我用Postman测试我的API似乎都能正常工作(我可以看到GoogleOAuth的html页面),但是在我的react应用程序中有一个锚定标记或者在url中手动写入端点,我只能看到相同的页面重新加载

My server 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)
流量:

本地主机: 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。