为了使用户登录体验更友好,之前做了个自动登录的优化。
实现方式为:在用户登录成功时,将 token 存入 cookie ;当用户下次来到本网站,读取 cookie 中的 token 时,自动登录。退出登录时则清空 token。
看起来很简单,而且对用户很友好
但是今天发现了一个漏洞,我本地 cookie 有效时间存的是 30 天,如果后端 token 的有效期和我存的时间不一致会发生什么?当用户某次自动登录时,响应拦截器发现 token 过期了,会把用户踢到登录页,然后登录页发现 cookie 中存了 token ,又会自动登录进去;进入系统后响应拦截器发现 token 过期了,又将用户踢去登录页...
死循环就这样发生了
怎么解决呢,很简单,在响应拦截器 401 时清除 token ,这样就不会存在本地存有过期 token 的问题了。
这个坑解决起来很简单,其实如何发现问题才是关键。平时还是得心思缜密一点。