。onRequest拦截器中如何使用axios帮助器setToken

问题描述 投票:0回答:1

我同时使用nuxt-authnuxt-axios模块。我想拦截每个axios请求,并检查我的JWT访问令牌是否快到期了,如果是,我想更新它。我为nuxt-auth编写了一个小扩展,如下所示。我的问题是,一旦我获得了新令牌,$auth.setToken(strategy,newToken)$axios.setToken(newToken)似乎就无法进行预期的更新。那我应该如何使用拦截器和助手呢?我不确定这是使用它们的正确地方/方法

var jwtDecode = require("jwt-decode")

export default function({$auth, $axios}) {
  const strategy = "local"

  $axios.onRequest( async(config) => {
    if ($auth.loggedIn) {
      let refreshToken = "some confidtion"

      if (refreshToken) {
        try {
          await refreshAccessURL()
        } catch (error) {
          return Promise.reject(error)
        }
      }
    }
    return config
  })

  async function refreshAccessURL() {
    const refresh = $auth.getRefreshToken(strategy)
    try {
      const { access } = await $axios.$post(refreshURL, { refresh })
      const newToken = "Bearer " + access
      $auth.setToken(strategy, newToken)
      $axios.setToken(newToken)

      return newToken

    } catch (e) {
      $auth.logout()
      throw new Error(e)
    }
  }
}
vue.js axios nuxt.js jwt-auth
1个回答
1
投票

您可以在plugins/axios.js内添加如下所示的拦截器>

export default function({ $axios }) {
  $axios.onRequest((config) => {
     config.headers['Authorization'] = `Bearer abc`;
  });
}
    
© www.soinside.com 2019 - 2024. All rights reserved.