Вернуться к запросу после обновления токенов - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь заставить работать токены обновления.

Это работает по большей части, но проблема в том, что я не уверен, как вернуться туда, где был исходный вызов до того, как токен доступа нуждался в обновлении.

Он не работает при первом обновлении, после этого токен обновляется, а затем снова работает нормально, пока не истечет срок действия.

Так что проблема в том, что я не могу вернуть его туда, где он был запущен при обновлении

Вот пример из компонента

created(){
 axios.get("http://localhost:63861/api/sampledata/WeatherForecasts").then(response => {
  console.log(response.data);
  //**** DO STUFF WITH THE DATA. I WANT TO GET BACK HERE AFTER REFRESH
})
.catch(error => {
  console.log(error);
});

Мне нужно вернуться к моменту, когда он может что-то делать с данными после обновления и сбрасывать токены доступа.

мой перехватчик:

import axios from "axios";
import store from "../store";
import Storage from "../services/storage";
import { REFRESH } from "../store/actions.type";

export default function execute() {
  // Request
  axios.interceptors.request.use(
    config => {
      var token = Storage.getAccessToken(); 
      if (token) {
        console.log("Bearer " + token);
        config.headers["Authorization"] = "Bearer " + token;
      }
      return config;
    },
    error => {
      return Promise.reject(error);
    }
  );

  // Response
  axios.interceptors.response.use(
    response => {
      return response;
    },
    error => {
      console.log("Error need to refresh");
      const originalRequest = error.config;
      // token expired
      if (error.response.status === 401) {
        originalRequest._retry = true;

        let tokenModel = {

      accessToken: Storage.getAccessToken(),
      client: "Web",
      refreshToken: Storage.getRefreshToken()
    };

    var refreshPath = "auth/" + REFRESH;
    store
      .dispatch(refreshPath, { tokenModel })
      .then(response => {
        console.log(response);
        return axios(originalRequest);
      })
      .catch(error => {
        console.log(error);
        // Logout
      });
  }
  return Promise.reject(error);
}

); }

1 Ответ

0 голосов
/ 24 января 2019

Вам нужно вернуть обещание обновления.

return store
  .dispatch(refreshPath, { tokenModel })
  .then(response => {
      console.log(response);
      return axios(originalRequest);
  })
  .catch(error => {
      console.log(error);
      // Logout
  });

Что происходит сейчас, когда вы отправляете действие, тогда ваш return Promise.reject(error) запускается.Возвращая обещание обновления, вы гарантируете, что axios ожидает завершения этой цепочки

...