Ax ios перехватчик для перефразирования sh токен не работает VueJS - PullRequest
0 голосов
/ 31 марта 2020

У меня проблема с топором ios перехватчик ниже - мой топор ios код

import axios from "axios";
import store from "@/store";
import LocalStorageService from "@/services/LocalStorageService";

axios.defaults.baseURL = "https://localhost:44390";
axios.defaults.headers = {
  "Content-Type": "application/json"
}

let isAlreadyFetchingAccessToken = false
let subscribers = []

function onAccessTokenFetched(access_token) {
  subscribers = subscribers.filter(callback => callback(access_token))
}

function addSubscriber(callback) {
  subscribers.push(callback)
}

axios.interceptors.response.use(function (response) {
  return response
}, function (error) {
  const { config, response: { status } } = error

  if (status === 500) {
    store.dispatch("setSnackbar", {
      type: "error",
      message: "An unexpected error occured."
    });
  }

  const originalRequest = config

  if (status === 401) {
    if (!isAlreadyFetchingAccessToken) {
      const accessToken = LocalStorageService.getAccessToken();
      const refreshToken = LocalStorageService.getRefreshToken();
      const accessTokenValidTo = LocalStorageService.getAccessTokenValidTo();
      const refreshTokenValidTo = LocalStorageService.getRefreshTokenValidTo();
      isAlreadyFetchingAccessToken = true
      axios.put("/opeaadminportal/Session", {
        AccessToken: accessToken,
        AccessTokenValidTo: accessTokenValidTo,
        RefreshToken: refreshToken,
        RefreshTokenValidTo: refreshTokenValidTo
      }).then(response => {
        isAlreadyFetchingAccessToken = false
        onAccessTokenFetched(response.data.tokens.accessToken)
        LocalStorageService.storeAuthInfo(
          response.data.tokens.accessToken,
          response.data.tokens.refreshToken,
          response.data.tokens.accessTokenValidTo,
          response.data.tokens.refreshTokenValidTo);
        axios.defaults.headers.common['Authorization'] = `Bearer ${response.data.tokens.accessToken}`;
      })
    }

    const retryOriginalRequest = new Promise((resolve) => {
      addSubscriber(access_token => {
        originalRequest.headers.Authorization = 'Bearer ' + access_token
        resolve(axios(originalRequest))
      })
    })
    return retryOriginalRequest
  }
  return Promise.reject(error)
})

, и проблема в том, что токен истек, я получаю 401 ошибку и выполняет топор ios .put метод и после этого я получаю статус 200, но в следующем запросе я снова получаю ошибку 401, хотя токен обновлен ниже, я прикрепляю экраны

токен обновления 200 после обновления sh токен 401

...