PERN应用Google OAuth本地正常,部署Heroku后回调重定向报503错误
PERN栈Heroku部署后Google OAuth回调重定向503错误
本地PERN栈应用的Google OAuth登录功能正常,部署到Heroku后大部分功能可用,但Google完成用户校验调用回调端点后,重定向至React应用的/signin路由时出现503服务不可用错误。日志可确认回调端点内的用户存在/不存在逻辑均正常触发,说明重定向前的流程无异常。
认证回调路由代码
app.get('my/callback/endpoint', passport.authenticate('google', { failureRedirect: '/failure', session: true, }), httpSigninWithGoogle(knex) );
回调控制器代码
function httpSigninWithGoogle (knex) { return async (req, res) => { const dbUser = await findOneUser(knex, req.user.oAuthId); // 检查用户是否已在数据库中 if (dbUser.length) { console.log(user already exists!) return res.redirect(`https://myapp.herokuapp.com/signin`) // 用户已存在则重定向到登录页,由React完成登录逻辑 } else { console.log(user doesn't exists!) const user = await signupWithGoogle(knex, req.user); // 用户不存在则用Google提供的信息创建新用户 return res.redirect(`https://myapp.herokuapp.com/signin`) // 重定向到登录页,由React完成登录逻辑 } } }
排查方向
- Heroku应用休眠机制:应用长时间无请求会进入休眠状态,回调请求触发后端唤醒,但重定向时前端应用可能未完成启动。可启用Heroku Web Dyno保持唤醒,或临时增加重定向延迟(非长期方案)。
- 重定向URL配置:确认Google Cloud Console中回调URL与Heroku后端端点完全一致,同时检查React生产环境下
/signin路由是否正常可访问。 - CORS跨域设置:若前端CORS配置未允许后端域名,可能导致浏览器拦截后续请求,需将Heroku后端域名加入前端允许列表。
- 日志定位错误源:用
heroku logs --tail实时查看前端应用日志(若前后端分开部署),确认503错误来自前端应用还是后端代理。 - 会话存储配置:Passport的
session: true依赖持久化会话存储,Heroku默认内存会话会在Dyno重启后丢失,需配置Redis等持久化存储避免会话失效。
内容的提问来源于stack exchange,提问作者GhostOrder
相关产品推荐
相关产品推荐

