Passport.js `isAuthenticated()` 不一致的行为;应该为真时为假
Passport.js `isAuthenticated()` inconsistent behavior; false when it should be true
我正在使用 Passport 允许用户通过 Google 登录。会话存储在 Postgres 中。在我看来,我已经正确配置了所有这些东西。但是,isAuthenticated()
返回的值不一致。
认证成功回调不一致。我已将 passport 配置为在用户成功登录后重定向到 /success
。
如果服务器刚刚启动(意味着还没有人尝试登录),那么 isAuthenticated()
returns true
/success
端点。
不过,一旦该用户注销,如果他们重新登录,则 isAuthenticated()
returns false
在 /success
路由上。如果他们刷新页面,那么它 returns true
.
/logout
端点的行为也不一致。有时它第一次有效,而有时用户需要刷新。
我看过人们遇到的类似问题。特别是,两个最常见的问题在这里似乎不是这样:
- CORS 已设置 (SO answer / my code)
- 我的中间件的顺序似乎是正确的(SO answer / my code)
logIn
不相关,因为我没有放置自定义回调 (SO Answer)
- 序列化工作正常;它只是在某些情况下不会被调用 (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
也许我遗漏了一些明显的东西?
tl;dr 是您需要在某些浏览器中手动调用保存(例如 Chrome)。他们不会在重定向之前等待整个响应。
更多信息,请参阅:
https://github.com/expressjs/session/issues/309#issuecomment-230594298
和相关问题。我在那里非常彻底地浏览了所有内容。
我正在使用 Passport 允许用户通过 Google 登录。会话存储在 Postgres 中。在我看来,我已经正确配置了所有这些东西。但是,isAuthenticated()
返回的值不一致。
认证成功回调不一致。我已将 passport 配置为在用户成功登录后重定向到 /success
。
如果服务器刚刚启动(意味着还没有人尝试登录),那么 isAuthenticated()
returns true
/success
端点。
不过,一旦该用户注销,如果他们重新登录,则 isAuthenticated()
returns false
在 /success
路由上。如果他们刷新页面,那么它 returns true
.
/logout
端点的行为也不一致。有时它第一次有效,而有时用户需要刷新。
我看过人们遇到的类似问题。特别是,两个最常见的问题在这里似乎不是这样:
- CORS 已设置 (SO answer / my code)
- 我的中间件的顺序似乎是正确的(SO answer / my code)
logIn
不相关,因为我没有放置自定义回调 (SO Answer)- 序列化工作正常;它只是在某些情况下不会被调用 (SO question / explanation in here;
session
isn'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
也许我遗漏了一些明显的东西?
tl;dr 是您需要在某些浏览器中手动调用保存(例如 Chrome)。他们不会在重定向之前等待整个响应。
更多信息,请参阅:
https://github.com/expressjs/session/issues/309#issuecomment-230594298
和相关问题。我在那里非常彻底地浏览了所有内容。