axios token过期重新请求

引言

在前后端分离的开发模式中,前端需要向后端发送请求获取数据。为了保证数据的安全性,后端通常会要求前端在每次请求时附带一个有效的token。token是一种身份验证方式,它可以帮助后端确认请求来自于合法的用户。

然而,token是有过期时间的,一旦过期,就需要重新获取一个有效的token来继续操作。在前端开发中,使用axios是一种常见的发送HTTP请求的库。本文将介绍如何使用axios在token过期时自动重新请求并更新token。

axios简介

axios是一个基于Promise的HTTP请求库,可以在浏览器和Node.js中使用。它支持请求拦截器和响应拦截器,可以在请求发送前和响应返回后进行一些处理。

axios的基本用法如下:

import axios from 'axios';

axios.get('/api/data')
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error(error);
  });

token过期重新请求流程

当token过期时,我们需要重新请求一个有效的token,并将其添加到每次请求的请求头中。下面是一个基本的流程图来说明这个过程:

flowchart TD
  A[发送请求] --> B{是否有token}
  B --> |有token| C[添加token到请求头]
  B --> |没有token| D[重新请求token]
  D --> C
  C --> E[发送带有token的请求]
  E --> F[处理响应]

实现

为了实现token过期重新请求的功能,我们需要使用axios的请求拦截器和响应拦截器。

首先,我们需要在请求拦截器中判断是否有有效的token。如果有,我们将其添加到请求头中;如果没有,我们将向后端重新请求一个有效的token,并将其保存起来。

import axios from 'axios';

let token = null;

axios.interceptors.request.use(config => {
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
}, error => {
  return Promise.reject(error);
});

axios.interceptors.response.use(response => {
  return response;
}, error => {
  if (error.response.status === 401) {
    return axios.post('/api/token')
      .then(response => {
        token = response.data.token;
        error.config.headers.Authorization = `Bearer ${token}`;
        return axios.request(error.config);
      })
      .catch(error => {
        return Promise.reject(error);
      });
  }
  return Promise.reject(error);
});

在上述代码中,我们首先定义了一个变量token来保存有效的token。在请求拦截器中,我们判断token是否存在,如果存在则将其添加到请求头中;在响应拦截器中,如果返回的响应状态是401(即token过期),我们将重新请求一个有效的token,并将其添加到请求头中。

这样,当我们发送请求时,axios会自动处理token过期的情况,并重新发送带有有效token的请求。

状态图

下面是一个使用mermaid语法绘制的状态图,表示token和请求的状态变化:

stateDiagram
  [*] --> NoToken
  NoToken --> HasToken
  HasToken --> [*]
  HasToken --> TokenExpired
  TokenExpired --> HasToken

结论

通过使用axios的拦截器,我们可以方便地实现token过期重新请求的功能。这样,我们就可以在前端开发中很好地处理token过期的情况,并且保证用户的操作不会因为token过期而中断。

希望本文对你理解axios token过期重新请求的流程有所帮助!