在构建javascript SPA(单页应用程序(时,我需要根据用户是否登录来显示不同的页面。
Auth由JWT处理,JWT通过httpOnly cookie和安全头提供服务。
这使得cookie无法从SPA javascript访问,这反过来意味着我不知道用户是否登录。
我确实查看了一些关于如何解决这个问题的帖子,发现了一些建议,比如
-
发送另一个不是httpOnly的cookie,该cookie带有一些标志,如会话ID或具有到期日期的用户ID,并且在客户端JS中,使用该cookie来查看用户是否经过了身份验证。
-
在API服务器上创建一个端点,类似
/is-logged-in
,并从JS进行http调用,以在显示页面之前检查用户是否通过了身份验证。 -
在本地存储JWT而不使用cookie(显然,由于安全原因和我必须编写的代码量,以减轻各种可能的窃取攻击,这是不可行的(
我参加SPA派对迟到了,但我相信这是一个长期解决的问题。我想我看不出什么明显的东西。
请给我指正确的方向。
为了完整起见,以下是一些未回答、半回答的相关帖子
- 只有当用户登录时,才在页面加载时发送GET请求
- 如何发现用户是否使用httpOnly JWT令牌cookie登录
- httpOnly cookie中的JWT-AuthGuard和受保护的路由(Node.js,Angular(
- 仅http cookie+令牌:双重作业
您基本上有两个选择:
保存用户使用第二个过期的非http cookie登录
优点
- 不需要添加HTTP请求
- 在您知道用户是否登录之前没有延迟
缺点
- 您需要保持两个cookie的过期和续订同步
- 如果您的cookie由于边缘情况而不再同步,您将需要检测到它并采取相应行动
使用HTTP请求,该请求将告诉您用户是否已登录
优点
- 不易出错
- 无需更改后端
缺点
- 您仍然需要检测用户在使用应用程序时是否不再登录