You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:40:34