vue 实现axios拦截、页面跳转和token 验证

下面我将详细讲解“Vue 实现 Axios 拦截、页面跳转和 Token 验证”的完整攻略。

简介

在 Vue 中,我们常常使用 Axios 发起网络请求。而为了保证数据的安全性和用户的登录状态,我们需要进行拦截、跳转和 Token 验证。下面是具体的实现步骤。

实现步骤

1. 安装依赖

首先,需要在项目中安装两个依赖:axiosvue-routeraxios 用于发送网络请求,vue-router 用于页面跳转。

npm install axios vue-router --save

2. 创建 Axios 实例

在 Vue 中,我们通常不会直接使用 Axios,而是创建一个 Axios 的实例。这个实例中会包含一些默认的配置,例如请求的基础 URL、请求头信息等。

import axios from 'axios';

const AxiosInstance = axios.create({
  baseURL: 'https://api.example.com',
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json;charset=utf-8'
  }
});

export default AxiosInstance;

3. 添加拦截器

Axios 的拦截器分为请求拦截器和响应拦截器。我们可以在这里对请求进行一些处理,例如添加 token、处理错误信息等。

import AxiosInstance from '@/service/axios';

// 添加请求拦截器
AxiosInstance.interceptors.request.use(
  config => {
    // 添加 token
    const token = sessionStorage.getItem('token');
    if (token) {
      config.headers.Authorization = token;
    }
    return config;
  },
  error => Promise.reject(error)
);

// 添加响应拦截器
AxiosInstance.interceptors.response.use(
  response => {
    // 处理错误信息
    if (response.data.code !== 200) {
      // 抛出错误信息
      return Promise.reject(response.data.message);
    }
    return response.data;
  },
  error => Promise.reject(error)
);

export default AxiosInstance;

4. 配置路由拦截

为了保证用户在未登录或者 token 失效的情况下无法访问受保护的页面,我们需要在路由中添加拦截器。

import VueRouter from 'vue-router';
import store from '@/store/index';

const router = new VueRouter({
  routes: [
    {
      path: '/',
      name: 'home',
      component: () => import('@/views/Home.vue')
    },
    {
      path: '/login',
      name: 'login',
      component: () => import('@/views/Login.vue')
    },
    {
      path: '/protected',
      name: 'protected',
      component: () => import('@/views/Protected.vue'),
      meta: {
        requireAuth: true // 添加该字段,表示该路由需要登录才能访问
      }
    }
  ]
});

// 路由拦截器
router.beforeEach((to, from, next) => {
  const token = sessionStorage.getItem('token');
  if (to.meta.requireAuth) {
    // 如果该路由需要登录才能访问
    if (token) {
      // 如果已经登录
      next();
    } else {
      // 否则跳转到登录页
      next({
        path: '/login',
        query: { redirect: to.fullPath } // 将跳转的路由 path 作为参数,登录成功后跳转到该路由
      });
    }
  } else {
    // 不需要登录就能访问的页面,直接放行
    next();
  }
});

export default router;

5. 示例

下面是两个示例:

5.1 登录

import AxiosInstance from '@/service/axios';

const login = async (username, password) => {
  const data = {
    username: username,
    password: password
  };
  const response = await AxiosInstance.post('/login', data);
  sessionStorage.setItem('token', response.data.token);
  return response.data;
};

export default {
  login
};

5.2 页面跳转

<template>
  <div>
    <h1>Welcome to Protected Page</h1>
  </div>
</template>

<script>
export default {
  mounted() {
    console.log('protected page mounted');
  }
};
</script>

结语

通过上述步骤的实现,我们已经能够做到拦截请求、页面跳转和 Token 验证了。希望这篇文章对你有所帮助。如果有不懂的地方或者技术上的疑问,欢迎在评论区留言。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue 实现axios拦截、页面跳转和token 验证 - Python技术站

(0)
上一篇 2023年6月16日
下一篇 2023年6月16日

相关文章

  • Java 关于String字符串原理上的问题

    以下是关于 Java 中 String 字符串原理的完整攻略: 1. String 的不可变性 Java 中的 String 字符串是不可变的,即一旦创建之后,其值就不能被更改。这是通过将 String 类中的字符数组(char array)标记为 final 来实现的。这也就意味着,一旦对字符串进行了修改,其实是创建了新的字符串对象。 例如,假如我们有如下…

    Java 2023年5月26日
    00
  • Java使用openOffice对于word的转换及遇到的问题解决

    下面是“Java使用openOffice对于word的转换及遇到的问题解决”的完整攻略,该攻略分为以下几个步骤: 安装openOffice 首先需要安装openOffice,可以通过官网或者软件源安装。安装完成后,确保openOffice服务已启动。 导入openOffice库 Java中使用openOffice实现word转换需要导入相关的库,具体可以参考…

    Java 2023年5月20日
    00
  • 如何在vue项目中嵌入jsp页面的方法(2种)

    在 Vue 项目中嵌入 JSP 页面可以通过以下两种方法实现: 方法一:使用 iframe 标签嵌入 JSP 页面 可以使用 iframe 标签嵌入 JSP 页面,使用方法如下: 在 Vue 组件中使用 iframe 标签,并设置 src 属性为 JSP 页面的地址。 <template> <div class="jsp-page…

    Java 2023年6月15日
    00
  • 如何基于java向mysql数据库中存取图片

    当我们需要在Java程序中存储图片文件时,可以将图片以二进制流的形式保存到MySQL数据库中的BLOB字段中。以下是基于Java向MySQL数据库中存取图片的完整攻略: 准备工作 确保已经安装并配置好了MySQL数据库,并创建需要保存图片的表,其列中包含一个BLOB类型的字段用于保存图片,例如: sql CREATE TABLE images ( id IN…

    Java 2023年5月20日
    00
  • JSP使用JDBC完成动态验证及采用MVC完成数据查询的方法

    JSP使用JDBC完成动态验证及采用MVC完成数据查询的方法 本文将详细讲解如何通过JSP使用JDBC完成动态验证及采用MVC完成数据查询的方法。步骤分为以下几个部分: I. JDBC动态验证 动态验证可以确保用户提供的输入数据是正确的。如果用户提供的数据无法通过验证,应该向用户显示错误消息。JDBC是Java语言访问关系型数据库的标准API。 以下是通过J…

    Java 2023年5月20日
    00
  • java二维数组指定不同长度实例方法

    实现Java二维数组指定不同长度的方法有很多种,下面我将罗列一些常用的方法,并提供两条示例说明。 方法一:定义不规则数组 不规则数组是指定义一个数组,其中包含若干行,每行的元素个数不同。例如: int[][] arr = new int[3][]; arr[0] = new int[]{1, 2}; arr[1] = new int[]{3, 4, 5}; …

    Java 2023年5月26日
    00
  • Java实现分页的前台页面和后台代码

    关于如何实现Java分页,需要分别从前台页面和后台代码两个部分进行讲解。 前台页面实现分页 在前台页面实现分页,主要采用的是利用jQuery的ajax异步加载技术来获取数据库中的数据,同时使用bootstrap的分页组件来实现分页。 示例代码如下: <!– 前台页面加载表格和分页组件 –> <table class="tabl…

    Java 2023年6月15日
    00
  • MyBatis实现表连接查询写法(三种对应关系)的方法总结

    关于“MyBatis实现表连接查询写法(三种对应关系)的方法总结”的完整攻略,我可以提供如下内容: 1. 需求 在实际开发中,经常需要对多个表进行联合查询,通常使用某些条件将多个表的数据关联起来。 2. 联接查询分类 联接查询可分为三种对应关系: 2.1 一对一 一对一映射是指两个表中的一行只能对应另一个表中的一行, 例如 一个学生对应一个身份证,一个身份证…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部