Как сделать проверку на 401?

Добрый день, пытаюсь доделать авторизацию. Есть сама api логина и если не получается, пытаемся получить рефреш токен по старому. Используя интерсепторы всё нафиг зависает потому что используется опять таки та же обработка 401 ошибки. А если токен совсем не валидный, то 401 вернется и для неё. Я не могу понять как лучше обработать именно refresh-token адрес, если там 401 ошибка. Неделю не могу правильно решить вопрос. Подскажите советом?
То есть надо как-то вернуть ошибку для рефреш токена запроса, если там 401.
import axios from "../../../axios/index.js"
import store from "../../../../store/store.js"

// Token Refresh
let isAlreadyFetchingAccessToken = false
let subscribers = []
let tokenIsValidAndFethed = false;

function onAccessTokenFetched(access_token) {
  localStorage.setItem("accessToken", access_token);
  subscribers = subscribers.filter(callback => callback(access_token))
}

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

export default {
  init() {
    axios.interceptors.response.use(function (response) {
      return response
    }, function (error) {
      // const { config, response: { status } } = error
      const { config, response } = error;
      const originalRequest = config;

      // if (status === 401) {
      if (response && response.status === 401) {
        if (!isAlreadyFetchingAccessToken) {
          isAlreadyFetchingAccessToken = true
          store.dispatch("auth/fetchAccessToken")
            .then((access_token) => {
              isAlreadyFetchingAccessToken = false
              onAccessTokenFetched(access_token.data.access_token)
            })
        }

        const retryOriginalRequest = new Promise((resolve) => {
          addSubscriber(access_token => {
              originalRequest.headers.Authorization = 'Bearer ' + access_token;
              resolve(axios(originalRequest))
          })
        });
        return retryOriginalRequest;
      }
      return Promise.reject(error)
    })
  },
  login(email, pwd) {
    return axios.post("/api/auth/login", {email: email, password: pwd}, {
        headers: { Authorization: "Bearer " + localStorage.getItem("accessToken") ? localStorage.getItem("accessToken") : ""}
    })
  },
  registerUser(name, email, pwd) {
    return axios.post("/api/auth/register", {displayName: name, email: email, password: pwd})
  },
  refreshToken() {
    return axios.post("/api/auth/refresh-token", {}, {
        headers: { Authorization: "Bearer " + localStorage.getItem("accessToken") ? localStorage.getItem("accessToken") : ""}
    })
  }
}
  • Вопрос задан
  • 624 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы