相关疑难解决方法(0)

Axios拦截器和异步登录

我正在我的网络应用程序中实现令牌身份验证.我的access token每N分钟过期,而不是refresh token用于登录并获得新的access token.

我使用Axios进行所有API调用.我有拦截器设置来拦截401响应.

axios.interceptors.response.use(undefined, function (err) {
  if (err.status === 401 && err.config && !err.config.__isRetryRequest) {
    serviceRefreshLogin(
      getRefreshToken(),
      success => { setTokens(success.access_token, success.refresh_token) },
      error => { console.log('Refresh login error: ', error) }
    )
    err.config.__isRetryRequest = true
    err.config.headers.Authorization = 'Bearer ' + getAccessToken()
    return axios(err.config);
  }
  throw err
})
Run Code Online (Sandbox Code Playgroud)

基本上,当我拦截401响应时,我想进行登录,然后使用新令牌重试原始被拒绝的请求.我的serviceRefreshLogin函数调用setAccessToken()它的then块.但问题是then阻塞发生的时间晚于getAccessToken()拦截器,因此重试发生在旧的过期凭证上.

getAccessToken()getRefreshToken()简单地返回存储在浏览器中的现有标记(它们管理localStorage,cookies等).

在承诺返回之前,我将如何确保语句不会执行?

(这是github上的相应问题:https://github.com/mzabriskie/axios/issues/266)

javascript authentication ajax promise axios

35
推荐指数
2
解决办法
4万
查看次数

标签 统计

ajax ×1

authentication ×1

axios ×1

javascript ×1

promise ×1