需求是登录之后会有一个 token 过期时间,时间不固定最长会有一个月,到了时间立刻弹框重定向到登录页,不能等到请求接口返回 403 再弹框,这个应该怎么实现呢?
1
liyang5945 2022-12-28 18:44:16 +08:00
token 和过期时间都存到 localstorage 里,js 写个定时器不断对比当前时间和过期时间,时间到了就跳转
|
2
lsy99 OP @liyang5945 这个提过了 PR 被拒了,被说会有性能问题,这个真的会很占用性能吗? setinterval 还不能太长要不然测试不过
|
3
MossFox 2022-12-28 19:16:53 +08:00
|
4
liyang5945 2022-12-28 19:38:56 +08:00
@lsy99 #2 用 webwoker 另开一个线程做这个事
|
5
oneisall8955 2022-12-28 19:52:05 +08:00 via Android
如果没有 refresh token 机制,到期了接口 403 到登录页,和你的主动到检测到期登录页一样的效果,一个前一点一个后一点而已,有啥区别?
|
6
xg4 2022-12-28 19:54:30 +08:00
```ts
interface Token { value: string expires: string } function onClear() { // TODO: clear } function setToken(token: string) { localStorage.setItem( 'token', JSON.stringify({ value: token, expires: new Date('2023/1/2 10:00:00').toISOString(), }) ) } function checkToken() { const tokenJson = localStorage.getItem('token') if (tokenJson) { const token: Token = JSON.parse(tokenJson) const diff = Date.now() - new Date(token.expires).getTime() if (diff >= 0) { onClear() return } setTimeout(onClear, diff) } } checkToken() ``` |
7
ChefIsAwesome 2022-12-28 20:01:02 +08:00
这种东西哪有在前端做的。在前端做,随随便便就绕过去了,有何意义?
|
9
lsy99 OP |
11
weiwoxinyou 2022-12-29 09:03:41 +08:00 via Android
微信读书 web 端做法是隔几分钟请求一下
|
12
magnetar 2022-12-29 10:56:57 +08:00
额,发起请求前检查过期时间就行了吧
|
13
z1829909 2022-12-29 18:05:25 +08:00
页面初始化的时候, 获取一下 token 的剩余时间, 然后 setTimeout
|