【问题标题】:Node.js + Passport - Unexpected redirect when using Google oauth2Node.js + Passport - 使用 Google oauth2 时出现意外重定向
【发布时间】:2020-04-11 06:37:41
【问题描述】:

我正在使用护照中间件构建 node.js 服务器。我正在尝试通过 Google 的 oauth2 对我的用户进行身份验证。

认证过程如下:

  1. 用户被重定向到<server>/auth/google,它使用了passport的中间件: passport.authenticate("google", { scope: ["profile", "email"] })

  2. 然后用户会收到 Google 的登录页面并登录

  3. Google 然后将用户重定向到<server>/auth/google/callback,它使用了护照的中间件: passport.authenticate("google", { failureRedirect: "/", session: false })

  4. 最终将用户重定向到<client>?token=<token>

我在 Netlify 上托管我项目的前端,在 NOW 上托管后端。

在 localhost 上运行时一切正常,但在生产环境中运行时,在第 3 步期间出现意外重定向,其中用户被重定向到 <server>/auth/google/t?token=<long-token-string> 而不是提到的路径。

此重定向背后的原因是什么?有什么建议吗?

谢谢,
奥菲克

【问题讨论】:

    标签: node.js oauth-2.0 passport.js middleware next.js


    【解决方案1】:

    在阅读和调试passport.jsoauth之后,我终于发现了问题所在。 这是我的代码中的一个错误。

    我在我的配置文件中使用了这个:

    export const CLIENT_ORIGIN =
      process.env.NODE_ENV === "production"
        ? "https://<project-name>.netlify.com"
        : ["http://127.0.0.1:3000", "http://localhost:3000"];
    

    因此,在 localhost 上运行时,在 StrategyOptions 中设置 callbackURL = CLIENT_ORIGIN[1] 是有意义的,但在生产中运行时 CLIENT_ORIGIN 收到值 "https://&lt;project-name&gt;.netlify.com"(字符串而不是数组),因此 CLIENT_ORIGIN[1] 返回字符"t"。结果,callbackURL 收到了值 "t",这导致了这个不可预测(且未记录)的重定向。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-19
      相关资源
      最近更新 更多