axios实现token无感刷新
【代码】axios实现token无感刷新。
·
import axios from 'axios';
import userServ from '@/api/user'
// 是否正在刷新的标记
let isRefreshing = false
//重试队列
let requests = []
//HTTPrequest拦截
axios.interceptors.response.use(async config => {
const res = config.data
console.log(config);
if (config.data&&res.code==600) {
if (!isRefreshing) {
isRefreshing = true
//调用刷新token的接口
return userServ.login({}).then(res => {
const { token } = res.data.data
localStorage.setItem('token',token)
// token 刷新后将数组的方法重新执行
requests.forEach((cb) => cb(token))
requests = [] // 重新请求完清空
return axios(config.config)
}).catch(err => {
return Promise.reject(err)
}).finally(() => {
isRefreshing = false
})
} else {
// 返回未执行 resolve 的 Promise
return new Promise(resolve => {
// 用函数形式将 resolve 存入,等待刷新后再执行
requests.push(() => {
resolve(axios(config.config))
})
})
}
}
return config;
}, error => {
return Promise.reject(new Error(error));
})
//user.js
import { apiURI } from './config';
import request from '../axios'
import qs from 'qs'
const userServ = {
login() {
let params = qs.stringify({
account: 'admin'
password: 'exakdbdkalakdd',
})
return request({
url: apiURI + '/api/oauth/Login',
method: 'post',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
data: params
})
}
}
export default userServ
更多推荐
已为社区贡献1条内容
所有评论(0)