【问题标题】:Passport.js `isAuthenticated()` inconsistent behavior; false when it should be truePassport.js `isAuthenticated()` 行为不一致;当它应该为真时为假
【发布时间】:2016-08-26 18:53:06
【问题描述】:

我正在使用 Passport 允许用户通过 Google 登录。会话存储在 Postgres 中。在我看来,我已经正确配置了所有这些东西。但是,isAuthenticated() 返回的值不一致。

不一致发生在认证成功回调中。当用户成功登录时,我已将护照配置为重定向到/success

如果服务器刚刚启动(意味着还没有人尝试登录),则isAuthenticated()/success 端点返回true

但是,一旦该用户注销,如果他们重新登录,则isAuthenticated()/success 路由上返回false。如果他们刷新页面,则返回true

/logout 端点的行为也不一致。有时它第一次工作,而其他时候用户需要刷新。

我看过人们遇到的类似问题。特别是,两个最常见的问题似乎不是这里的情况:

  1. CORS 已设置 (SO answer / my code)
  2. 我的中间件的顺序似乎是正确的 (SO answer / my code)
  3. logIn 不相关,因为我没有设置自定义回调 (SO Answer)
  4. 序列化工作正常;它只是在某些情况下不会被调用 (SO question / explanation in here; session isn't finding su)

在过去的几个小时里,我一直在通过 Passport 源代码来尝试解决这个问题。关于我发现的更多信息可以在这里阅读on the Passport repo.

这个项目是开源的。这里正在配置中间件:

https://github.com/jmeas/finance-app/blob/google-sign-in/server/app.js

Passport 配置可以在这里看到:

https://github.com/jmeas/finance-app/blob/google-sign-in/server/utils/configure-passport.js

也许我遗漏了一些明显的东西?

【问题讨论】:

    标签: javascript node.js express passport.js


    【解决方案1】:

    tl;dr 是您需要在某些浏览器(如 Chrome)中手动调用 save 。他们不会在重定向之前等待整个响应。

    更多信息,请参见:

    https://github.com/expressjs/session/issues/309#issuecomment-230594298

    和相关的问题。我在那里非常彻底地浏览了所有内容。

    【讨论】:

    • 我建议您将代码从 github 中取出,然后将其粘贴到 stackoverflow 上的答案中。这将减少解决此问题所需的额外点击次数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 2012-12-06
    • 2013-07-21
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多