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日

相关文章

  • 大厂禁止SpringBoot在项目使用Tomcat容器原理解析

    这个问题需要分成两部分来回答: 第一部分是为什么大厂禁止Spring Boot在项目中使用Tomcat容器; 第二部分是如何在Spring Boot中使用内嵌容器。 为什么大厂禁止Spring Boot在项目中使用Tomcat容器? 大厂禁止Spring Boot在项目中使用Tomcat容器的主要原因有以下几个: 性能问题:在高并发情况下,Tomcat容器有…

    Java 2023年6月2日
    00
  • bootstrap——bootstrapTable实现隐藏列的示例

    当你需要在Bootstrap Table中隐藏列时,可以通过以下步骤实现: 第一步:下载Bootstrap Table 首先,需要从Bootstrap Table官网下载Bootstrap Table插件。 官网链接:https://bootstrap-table.com/ 第二步:编写HTML代码 在编写HTML代码之前,需要加载Bootstrap样式表和…

    Java 2023年6月15日
    00
  • 深入了解Java定时器中的Timer的原理

    深入了解Java定时器中的Timer的原理攻略 什么是Java定时器 在Java中,我们可以使用定时器来实现周期性和延迟任务。定时器可以根据开发人员设定的时间间隔周期性地触发任务,并且可以延迟执行某个任务。其中,Java Timer则是Java提供的一个定时器工具,能够实现任务的定时执行。 Java Timer的工作原理 Java Timer是基于Java的…

    Java 2023年5月20日
    00
  • java中常见的中文乱码总结

    Java中常见的中文乱码总结 中文乱码是我们Java开发中常见的问题,本文将介绍常见的中文乱码问题及其解决方法。 常见的中文乱码问题 控制台输出中文乱码 在Eclipse和IntelliJ IDEA等集成开发环境中,直接使用System.out.println()方法输出中文,常会出现乱码问题。这是因为控制台默认使用的字符集为操作系统默认的字符集,而Java…

    Java 2023年5月20日
    00
  • Java使用httpRequest+Jsoup爬取红蓝球号码

    下面是Java使用httpRequest+Jsoup爬取红蓝球号码的完整攻略。 1. 确定目标网站和爬取方式 首先要确定目标网站,这里以中国福利彩票双色球为例(http://www.cwl.gov.cn/kjxx/ssq/kjgg/)。双色球的开奖号码一般都是在晚上9点左右开奖,因此爬取频率要保持在一天只进行一次,以免被服务器屏蔽。另外,在爬取过程中需要保持…

    Java 2023年6月15日
    00
  • 如何基于SpringSecurity的@PreAuthorize实现自定义权限校验方法

    下面是详细攻略。 1. SpringSecurity基本概念 SpringSecurity是基于Spring框架的安全认证和授权模块,可以为我们的应用提供强大的安全管理。在SpringSecurity中,每个用户都有一个唯一的用户名和一个密码,SpringSecurity会在用户登录时对这些信息进行校验,如果校验通过则允许用户进行下一步操作,否则拒绝用户进行…

    Java 2023年5月20日
    00
  • Java Date(日期)对象进行格式化的思路详解

    以下是Java Date(日期)对象进行格式化的完整攻略。 格式化思路 Java中提供了SimpleDateFormat类,可以将Date对象转换成指定格式的字符串。SimpleDateFormat类中定义了一些字符,用于表示时间在输出时应该如何格式化。例如,字符yyyy表示年份,MM表示月份,dd表示日期,HH表示小时,mm表示分钟,ss表示秒钟等。这些字…

    Java 2023年5月20日
    00
  • Java并发编程之创建线程

    当进行Java并发编程时,创建线程是其中非常重要的一个步骤。本篇攻略将为你详细介绍Java中创建线程的各种方式和技巧,并提供两条实际例子。 一、Java中创建线程的方式 Java中创建线程有以下几种方式: 1. 继承Thread类 此方法需要继承Java中的Thread类,并重写其run()方法来定义线程的行为。 public class MyThread …

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