httpOnly cookie:检查用户是否已登录react应用程序



我有一个react应用程序和一个nodejs服务器。我设置了一个httpOnly cookie,其中包含用于身份验证的JWT。这是有效的。问题是:我需要一些逻辑客户端来检查用户是否登录。当用户登录时,我可以存储这个"状态";在内存中(例如useState(,但当浏览器重新加载时,此状态将消失(而cookie仍在(。

我试过使用js cookie,但显然这不起作用,因为它是httpOnly cookie。

在浏览器中打开react应用程序时,我如何在不向服务器发出(测试(axios请求的情况下检查用户是否登录?

编辑:本问题的答案建议将令牌存储在LocalStorage中,但其他资源(如本问题答案中的讨论(表示,cookie是可行的。

需要明确的是,我不需要直接访问cookie中的令牌,cookie是随每个axios请求({withCredentials: true}(一起发送的,它的工作方式与预期的一样。但我只需要知道是否设置了cookie(因此用户登录(。

这种情况可以有多种方法。我认为你能做什么。

1-你可以发送一个http请求,检查JWT在初始应用程序加载时以及何时重新加载应用程序时是否有效(基本上是一样的(,然后在应用程序内保留一些身份验证状态(Context Api或Redux(,通过这种方式你可以控制路由等。

2-确保无论JWT何时过期,都清除cookie,无论客户端何时收到401,都刷新您的任何已验证状态,并将用户重定向到登录页面或任何不需要验证的页面。

只是添加到所选答案中。

加载组件和isLoading状态将有助于防止在瞬间显示已验证/受保护的屏幕。例如isLoading ? <LoadingComponent /> : <ProtectedComponent />

您可以在请求完成时更新isLoading状态,如果请求产生未经验证的响应代码,则可以执行重定向。

最新更新