【发布时间】:2016-08-26 18:53:06
【问题描述】:
我正在使用 Passport 允许用户通过 Google 登录。会话存储在 Postgres 中。在我看来,我已经正确配置了所有这些东西。但是,isAuthenticated() 返回的值不一致。
不一致发生在认证成功回调中。当用户成功登录时,我已将护照配置为重定向到/success。
如果服务器刚刚启动(意味着还没有人尝试登录),则isAuthenticated() 为/success 端点返回true。
但是,一旦该用户注销,如果他们重新登录,则isAuthenticated() 在/success 路由上返回false。如果他们刷新页面,则返回true。
/logout 端点的行为也不一致。有时它第一次工作,而其他时候用户需要刷新。
我看过人们遇到的类似问题。特别是,两个最常见的问题似乎不是这里的情况:
- CORS 已设置 (SO answer / my code)
- 我的中间件的顺序似乎是正确的 (SO answer / my code)
-
logIn不相关,因为我没有设置自定义回调 (SO Answer) - 序列化工作正常;它只是在某些情况下不会被调用 (SO question / explanation in here;
sessionisn't findingsu)
在过去的几个小时里,我一直在通过 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