Passport.js`isAuthenticated()`不一致的行为;应该是真的假

时间:2016-05-02 04:44:37

标签: javascript node.js express passport.js

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

在进行身份验证的成功回调中会发生不一致。我已将护照配置为在用户成功登录后重定向到/success

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

一旦该用户注销,如果他们重新登录,则isAuthenticated()会在false路由上返回/success。如果他们刷新页面,则返回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
  5. 在过去的几个小时里,我一直在逐步完成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

    也许我错过了一些明显的东西?

1 个答案:

答案 0 :(得分:3)

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

有关更多信息,请参阅:

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

和相关问题。我在那里彻底地完成了一切。