我试图让一个用户在多个设备上登录到同一个用户名。在后端,我们通过 oauth2orize npm 包使用 node/express rest api 和 oAuth2 JWT token 。
目前,我们后端身份验证的工作方式是用户登录后,会收到一个 JWT token 和一个 JWT 刷新 token 。当用户注销时, token 将失效。我们遇到的问题是用户将在一台计算机上登录,然后在另一台计算机上登录同一帐户。当第二次登录发生时,将向用户提供新 token 和刷新 token 。现在,当用户返回到第一台计算机时,刷新 token 无效,导致用户退出。
一个解决方法是我们尝试在 cookie 中保留一个 sessionId,但 Angular 似乎在每次请求时都返回一个新的 sessionId。以下是请求的示例。
-- session --
l3s-kZCEUaz8TYhElVtARIwbl6PKTm_o
{ cookie:
{ path: '/',
_expires: Fri Aug 05 2016 00:23:44 GMT+0000 (UTC),
originalMaxAge: 31449600000,
httpOnly: true } }
-- session --
hN961RAc2YSlmzngr3R6zXuJnp4cFF_P
{ cookie:
{ path: '/',
_expires: Fri Aug 05 2016 00:23:46 GMT+0000 (UTC),
originalMaxAge: 31449600000,
httpOnly: true } }
任何有关让 Angular 通过 cookie 返回正确的 sessionId 的帮助或有关如何处理多个登录的任何其他建议都将不胜感激。
最佳答案
您尝试的方法接近解决方案。只生成一个 randomString 而不是获取 sessionId。然后在更新 token 时检查 tokenId 和 randomString 是否相同。如果不是,则添加为新登录名,否则更新当前 token 。同样的检查也适用于注销方法。
通过应用此相同的用户将获得用于登录不同设备的不同 token ,并且 jwt token 到期将根据每个设备的登录持续时间工作。
关于angularjs - 如何让用户使用 Express 和 oAuth2 在 Angular 中的多个设备上登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31923864/