antd pro 刷新token的问题

基本antd pro开发的管理系统,请求用的umi-request。现在需要做token过期处理的问题。
我在网上查一下,大概意思就是:第一次登录之后后台会返回三个字段,accessToken(我这里就叫token)、refreshToken、refreshTime(我这里叫tokenPeriodTime)。然后根据当前系统时间判断是不是大于refreshTime,如果是,说明过期了,就拿refreshToken调刷新token的接口重新获取accessToken,如果refreshToken也过期了,就返回401重新登录

现在有几个问题:
1、如果token(accessToken)过期了,但是refreshToken没有过期,那是不是意味着每次请求都要刷新token,然后拿新的token去发请求
2、我在request.js的拦截器如何拿到dispatch去调刷新token的接口
3、刷新完拿到新的token再存到localstorage或者redux里,这个时候能不能保证我接下来的请求能及时拿到这个新token

这是request.js部分代码
我们后台返回了token、refreshToken tokenPeriodTime我都存到本地了
// * 异常处理程序
const errorHandler = error => {
const { response } = error;
if (response && response.status) {

const errorText = codeMessage[response.status] || response.statusText;
const { status, url } = response;
notification.error({
  message: `请求错误 ${status}: ${url}`,
  description: errorText,
});

} else if (!response) {

notification.error({
  description: '您的网络发生异常,无法连接服务器',
  message: '网络异常',
});

}

return response;
};

// * 配置request请求时的默认参数

const request = extend({
errorHandler,
//credentials: 'include', // * 默认请求是否带上cookie
prefix: '/api',
headers: {

'Content-Type': 'application/json;charset=UTF-8'

}
});

// * 请求拦截
request.interceptors.request.use(async (url, options) => {
let token = localStorage.getItem('token');
if(token) {

let timestamp = new Date().getTime()
let tokenPeriodTime = Number(localStorage.getItem('tokenPeriodTime'))
timestamp < tokenPeriodTime && (options.headers['token'] = token) || // * 刷新token

}
return {

url,
options

}
})

export default request;

阅读 896
评论
    2 个回答

    感觉这个思路有点过于复杂了,能不能简化一下:

    1. 获取 token 后,是否过期由后端管理,前端无感知;
    2. token 一旦过期,收到后端 token 过期的返回信息后,前端自动跳转到登陆页,必须重新登录获取 token。
      • 1
      • 新人请关照

      你好,请问这个问题解决了吗,我们项目的token验证方式跟你的这个情况一样。。

      该答案已被忽略,原因:

        撰写回答

        登录后参与交流、获取后续更新提醒

        相似问题
        推荐文章