Passport.js`isAuthenticated()`不一致的行为;当它应该是真的时候是假的
Passport.js `isAuthenticated()` inconsistent behavior; false when it should be true
我使用Passport允许用户通过谷歌登录。会话存储在Postgres中。在我看来,我已经正确配置了所有这些东西。但是,isAuthenticated()
返回的值不一致。
这种不一致发生在身份验证的成功回调中。我已经将passport配置为当用户成功登录时重定向到/success
如果服务器刚刚启动(意味着还没有人尝试登录),则isAuthenticated()
会为/success
端点返回true
。
然而,一旦该用户注销,如果他们重新登录,则isAuthenticated()
在/success
路由上返回false
。如果刷新页面,则返回true
。
/logout
端点的操作也不一致。有时它第一次工作,而在其他时候用户需要刷新。
我看过人们遇到的类似问题。特别是,两个最常见的问题似乎并非如此:
- CORS已设置(SO答案/我的代码)
- 我的中间件的顺序似乎是正确的(SO答案/我的代码)
logIn
不相关,因为我没有放置自定义回调(SO Answer)- 序列化工作正确;它只是在某些情况下不会被调用(此处为SO问题/解释;
session
找不到su
)
在过去的几个小时里,我一直在浏览Passport源代码,试图弄清楚这一点。关于我发现的更多信息,可以在这里的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)中手动调用save。他们不会在重定向之前等待整个响应。
有关更多信息,请参阅:
https://github.com/expressjs/session/issues/309#issuecomment-230594298
以及相关问题。我把那里的一切都看得很透彻。
- 指令加载真的很长,检查加载时间的方法
- JS,“;对象”;,这个和那个.来自蟒蛇这真的让我很困惑.(双关语)
- 为什么这是真的:parseInt(1111111111111,2)===parseInt(111111111111,2)
- (false==false==true)怎么可能是真的
- 使用js/jQuery检查对象(而不是元素)是否真的存在
- 为什么typeof的数组的数组的未定义值返回为“0”;未定义的“;我的条件不认为是真的
- coffescript/javascript函数数组的行为真的很奇怪
- Passport.js`isAuthenticated()`不一致的行为;当它应该是真的时候是假的
- 真的没有办法在Firefox中自动杀死没有响应的脚本吗
- html() 真的取代了 html 代码吗?
- 有没有办法检测用户是否真的远离计算机
- 饶恕是真的就是假的
- Extjs form.reset() 不作为 trackResetOnLoad 工作是真的
- 在 JavaScript 中真的需要提升以实现相互递归吗?
- 为什么 1.2 == true 返回 false 如果布尔值 (1.2) 实际上是真的
- IE11真的与getNamedItem()JS函数不兼容吗
- blink()方法真的被弃用了吗
- 我真的必须重新加载我的页面两次吗
- 凌驾于违约之上真的有危险吗;控制台'在节点中
- xmlHttp.status==200从来都不是真的