当前言最近进行需求时,它涉及登录令牌,并且该产品提出了一个问题:令牌可以在更长的时间内到期,我经常登录。
前端:后端,您可以将令牌设置为更长的时间吗?
后端:是的,但这是不安全的,您可以使用更好的方法。
前端:什么方法?
后端:给您令牌的界面,并定期刷新令牌
前端:好的,让我考虑一下
当令牌到期时,令牌会得到刷新,并且需要在没有刷新的情况下刷新前端,也就是说,当您刷新令牌时,必须感知并避免频繁登录。
后端返回时间,前端判决令牌到期
缺点:您需要为后端时间提供额外的时间;使用当地时间的判断。如果当地时间被篡改,尤其是当当地时间比服务器时间慢时,拦截将会失败。
写一个计时器并定期刷新令牌接口
缺点:废物资源,消费绩效,不建议。
在响应拦截器中进行拦截,判断令牌的返回,请刷新令牌接口
基本骨骼,用于拦截
我们控制它是否正在通过变量iSrefresshighther。
当第二次过期请求进来时,令牌是令人耳目一新的,我们首先将此请求存放到阵列队列中,找到一种在等待中提出此请求的方法,等待刷新刷新,然后尝试通过一个人。如何在等待中提出此请求?解决这个问题,我们必须使用Promise。将请求存入队列后,同时返回承诺,以便该诺言始终处于待处理状态(也就是说,不调用解决)。目前,此请求将等待。刷新请求返回的接口时,我们致电Resolve,然后一一尝试一下。最终代码: