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