Проверьте, если токен все еще действителен перед запросом - PullRequest
0 голосов
/ 08 марта 2019

Я использую файл index.js для выполнения вызовов API в приложении vue.Есть ли способ добавить перехват или перед каждым вызовом, чтобы проверить, исправен ли мой токен, и перенаправить ли пользователя на вход в систему, если это не так?

import axios from 'axios'

const client = axios.create({
   baseURL : 'http://myapi.com/api/',
    json: true
})

export default {
    async execute(method, resource, data) {
        const token = localStorage.getItem('token')
        return client({
          method,
          url: resource,
          data,
           crossdomain: true ,
          headers: { "Authorization": `Bearer ${token}` }
        }).then(req => {
          return req.data
        })
      },

      getResponses() {
        return this.execute('get', 'GetResponses')
      },

      getAll(){
        return this.execute('get', 'GetAll')
      },

Ответы [ 2 ]

1 голос
/ 09 марта 2019

Вы можете использовать перехватчик , где вы можете передать функцию, вызываемую перед каждым запросом:

const client = axios.create({ baseURL: 'http://myapi.com/api/', json: true });

client.interceptors.request.use((config) => {
  const token = localStorage.getItem('token');

  if (isTokenGood(token)) {
    return config;
  } else {
    logout();
  }
});
0 голосов
/ 11 марта 2019

Если кому-то интересно, я в итоге пойду с перехватчиком согласно @thanksd Мой код index.js файл в моей папке API теперь выглядит следующим образом

import axios from 'axios'
import router from '../router'

const client = axios.create({
   baseURL : 'http://myapi.com/api/',
    json: true
})

client.interceptors.response.use(function (response) {
  return response
}, function (error) {
  if (error.response.status === 401) {
    router.push('/Login')
    console.info('auth token expired')
    localStorage.clear()
    sessionStorage.clear()
  } else if (error.response.status === 403) {
    router.push('/Login')
  } else {
    return Promise.reject(error)
  }
})

export default {
    async execute(method, resource, data) {
        const token = localStorage.getItem('token')
        return client({
          method,
          url: resource,
          data,
           crossdomain: true ,
          headers: { "Authorization": `Bearer ${token}` }
        }).then(req => {
          return req.data
        })
      },

      getResponses() {
        return this.execute('get', 'GetResponses')
      },

      getAll(){
        return this.execute('get', 'GetAll')
      },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...