как использовать вспомогательный setToken axios внутри перехватчика .onRequest

Я использую как nuxt-auth, так и nuxt-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)
    }
  }
}

person Gers    schedule 08.06.2020    source источник


Ответы (1)


Вы можете добавить перехватчик, как показано ниже, внутри plugins/axios.js

export default function({ $axios }) {
  $axios.onRequest((config) => {
     config.headers['Authorization'] = `Bearer abc`;
  });
}
person Hardik Shah    schedule 08.06.2020
comment
Я действительно хочу, чтобы auth был доступен внутри моего перехватчика (поэтому я сделал плагин для nuxt-auth, а не для axios. Кстати, вопрос, в чем разница между использованием config.headers['Authorization'] = 'Bearer abc' или $axios.setToken(newToken)? - person Gers; 09.06.2020
comment
если вы видите документ для setToken (axios.nuxtjs.org/helpers.html#settoken) внутри он делает то же самое, что и headers['Authorization'] = 'Bearer abc'. Когда я пытался использовать setToken, мне тоже не удалось из-за некоторой внутренней ошибки nuxt/axios - person Hardik Shah; 09.06.2020