我目前正在使用Express Framework和React作为我的前端运行NodeJs。当我在开发机器上提出请求时,登录(passport-google)完美无瑕。由于我将https添加到生产服务器,因此它不再适用于Google Chrome。 Safari和IE正在运行。
我认为请求没有被代理到快递服务器。
"proxy": {
"/api/*": {
"target": "http://localhost:3001",
"secure": false
}
反应中的代理设置
这是身份验证途径
router.get(
"/auth/google",
passport.authenticate("google", {
scope: ["profile", "email"]
})
);
router.get(
"/auth/google/callback",
passport.authenticate("google"),
(req, res) => {
res.redirect("/dashboard");
}
);
谢谢
答案 0 :(得分:0)
不确定在Safari和IE中如何工作,而不是在Chrome中工作,但不能确定生产环境中不存在Create-React-App服务器。
如果要部署到Heroku,一切都会改变。在Heroku中部署到生产之前,您必须构建您的React项目。当您构建React项目时,CRA会获取所有JavaScript和CSS文件,并对所有这些文件运行Webpack和Babel并将最终版本保存到build/
文件夹中。
当用户在Heroku上访问您的应用程序时,您仅在运行Node / Express API,它将用户带回到HTML文件和放置在build/
文件夹中的新建JavaScript文件。
npm run build
是部署到生产之前要运行的内容。
因此,当您进入生产环境时,只需要构建应用程序,将其提交,部署到Heroku,然后将其留给Express服务器即可提供所有不同的JavaScript文件。
因此,您只需担心开发环境的代理,因为生产环境中不存在CRA。
您应该在React应用程序中使用相对路由。
代理的整个想法是将请求从localhost:3000/auth/google
重新路由到localhost:5000
,因为您正在运行开发中的两台服务器,因此必须代理API请求,但是在部署时,不需要不再使用CRA,CRA仅存在于开发中以帮助我们创建高质量的React应用程序。
至少在Heroku中部署到生产环境时,Localhost 3000和5000不再存在。