【问题标题】:Return to request after refreshing tokens刷新令牌后返回请求
【发布时间】:2019-01-23 21:41:55
【问题描述】:

我正在尝试让刷新令牌工作。

它在大多数情况下都有效,但问题是我不确定如何返回到需要刷新访问令牌之前的原始调用位置。

第一次刷新时不起作用,之后刷新令牌,然后再次正常工作,直到过期。

所以问题是我无法让它回到刷新时开始的位置

这是组件中的一个示例

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);
}

); }

【问题讨论】:

    标签: vue.js axios refresh-token


    【解决方案1】:

    您需要返回您的刷新承诺。

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

    现在发生的事情是您发送操作,然后您的 return Promise.reject(error) 运行。通过返回刷新承诺,您可以确保 axios 等待该链完成

    【讨论】:

      猜你喜欢
      • 2016-01-05
      • 2018-11-18
      • 2019-10-10
      • 2019-11-08
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多