function setWithExpiry(key, value, expiration) {
const now = new Date()
// `item` is an object which contains the original value
// as well as the time when it's supposed to expire
const item = {
value: value,
expiry: now.getTime() + expiration,
}
localStorage.setItem(key, JSON.stringify(item))
}
5条答案
按热度按时间vktxenjb1#
一旦你收到一个jwt token,你可以为你的jwt token设置一个“过期时间”。例如,如果我收到一个令牌,其id为:“abc_token_123”,我将在
sessionstorage
,localstorage
甚至cookies
中创建一个对象,其中包含一个名为expireTime的密钥(例如)。我将在主文件(App.js)上使用useEffect钩子来观察时间,如果时间超过到期时间,则将用户注销,否则,如果到期密钥存在于您的存储中,则保持用户登录。7cjasjjr2#
如果用户选择“记住我”选项,则将JWT存储在浏览器本地存储中。假设您可以更改后端JWT过期时间,在用户选择记住我的地方,使JWT过期时间更长(可以接受的登录间隔天数)。
zqdjd7g93#
在网上搜索后,我找到了这个答案in this website。该网站还扩展了如何加载它。
这样做是为了设置一种方法,将
'RememberMe'
保存到本地存储,并保留一定的过期时间。ldioqlga4#
您可以通过创建“记住我”复选框并为其创建引用来实现此功能:
在这个特定的例子中,我使用
useState
来声明凭证,因为我认为在输入字段上设置defaultValue
更容易,只需将它们设置为localStorage上的值:然后创建一个函数来检查是否应该记住它:
然后使用此函数递增
submit()
函数,检查API调用的响应,如果它是200
(从后端接收的JWT令牌),则调用remember()
函数将登录名和密码存储在localStorage
上zf9nrax15#
我更喜欢@Hopey One的想法。
如果用户选择记住我选项,则将JWT存储在浏览器本地存储中。
在我的例子中,我需要一个令牌来不时地与API通信(但现在我在
localStorage
中没有令牌,因为用户没有选择记住我选项)。所以我用一个州来保存它。一切都很完美,但问题是当我刷新页面时,我的令牌为空。因此,我使用sessionStorage在用户没有选择rememberme选项时存储令牌。这是我的useAuth
自定义钩子文件中的代码示例。