【发布时间】:2019-07-27 21:05:52
【问题描述】:
我正在尝试查看令牌是否过期,如果是,则发送刷新请求,然后才继续执行。
axios.interceptors.request.use(config => {
let accessToken = getAccessToken()
if (accessToken && user) {
config.headers['authorization'] = `Bearer ${accessToken}`
config.headers['cache-control'] = `no-cache`
const { exp } = jwtDecode(accessToken)
if (Date.now() > exp * 1000) {
refreshAccessToken().then(() => { return config }) // wait for refresh
} else {
return config
}
}
}, function (error) {
return Promise.reject(error)
})
这是一个带有承诺的刷新令牌函数:
function refreshAccessToken() {
return new Promise(async (resolve, reject) => {
if (refreshing) return resolve('refresh in progress')
refreshing = true
let refreshToken = getRefreshToken()
let response = await serverTokenRefresh(refreshToken)
if (response.success) {
setAccessToken(response.accessToken)
response.email = user
setLocalStorageUser(response)
refreshing = false
return resolve('refresh successful')
} else {
await logOut()
refreshing = false
return reject(Error('refresh fail: ' + response.message))
}
})
}
出于某种原因,Axios 不想等到刷新函数完成并且不向服务器发送任何调用。
我做错了什么?
【问题讨论】:
-
你在`refreshAccessToken().then(() => { return config }) 中缺少文字
return// 等待刷新`
标签: javascript promise xmlhttprequest axios