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日

相关文章

  • jquery ajax 局部刷新小案例

    首先,让我们了解一下jQuery的ajax方法,该方法允许我们通过JavaScript代码向服务器发送异步HTTP请求,并在服务器响应事件时更新部分页面内容,使得页面刷新更快,用户体验更加顺畅。 接下来,我们将介绍一个jquery ajax的小案例,以帮助您更好地理解如何使用jQuery和ajax来实现局部刷新。 一、案例需求 我们的网站有一个评论区,用户可…

    Java 2023年6月15日
    00
  • Java构造方法实例详解(动力节点java学院整理)

    我来为你讲解一下Java构造方法实例的攻略。 什么是构造方法? 构造方法是Java程序中一个非常重要的组成部分,它在创建一个对象的时候被调用。构造方法的作用是初始化对象,并为对象的成员变量赋初始值。 Java的构造方法与普通方法有很大的区别,主要表现在以下几个方面: 构造方法的方法名必须与类名相同,且没有返回值类型(包括void),不需要使用return语句…

    Java 2023年5月20日
    00
  • JSP 自动刷新的实例详解

    下面是“JSP 自动刷新的实例详解”完整攻略。 一、JSP 自动刷新简述 JSP 自动刷新,是指在 JSP 页面中,不需要手动刷新页面,而是自动刷新页面。这对于需要实时更新数据的应用场景非常实用,比如在线聊天室。 二、JSP 实现自动刷新的方法 JSP 实现自动刷新有两种方法: 1. 使用 HTML 的 meta 标签 <meta http-equiv…

    Java 2023年6月15日
    00
  • Spring boot从安装到交互功能实现零基础全程详解

    Spring boot从安装到交互功能实现零基础全程详解 本文将详细讲解如何从零开始安装和使用Spring Boot,以及如何实现基本的交互功能,让你从零基础到实现一个Spring Boot应用项目。 安装 首先,你需要安装Java和Maven。 安装Java 访问Oracle官网,下载并安装最新版本的JDK。 安装Maven 访问Apache Maven官…

    Java 2023年5月15日
    00
  • 解析JDK14中的java tools简介

    解析JDK14中的java tools简介 什么是java tools Java tools是JDK提供的开发工具,它包含了很多命令行工具,可以帮助开发者完成各种任务。 使用Java tools,我们可以进行以下操作: 编译和打包Java程序 运行Java程序 调试Java程序 分析Java程序的性能 生成Java文档等 Java tools的常用命令 ja…

    Java 2023年5月26日
    00
  • SpringBoot利用AOP实现一个日志管理详解

    来讲一下SpringBoot利用AOP实现一个日志管理的详细攻略。 一、前置知识 在讲解具体实现之前,需要对一些前置知识进行解释: 1.1 AOP AOP(Aspect Oriented Programming,面向切面编程)是一种编程思想,可以将与业务无关的部分(例如日志记录、权限验证等)剥离出来,通过以独立的方式进行定义和维护,将其在需要时运用进程序设计…

    Java 2023年5月19日
    00
  • JSP上传文件到指定位置实例代码

    下面我将详细讲解“JSP上传文件到指定位置实例代码”的完整攻略: 标题 JSP上传文件到指定位置实例代码 代码实现步骤 首先在 JSP 页面中使用 input 标签设置一个文件上传表单: <form action="upload.jsp" method="post" enctype="multipart…

    Java 2023年6月15日
    00
  • mybatis高级映射一对多查询实现代码

    以下是“mybatis高级映射一对多查询实现代码”的完整攻略。 一、什么是一对多查询 Mybatis中,一对多查询指的是查询一个实体对象时,它包含了多个关联对象。比如我们要查询一篇文章及其所有的评论,文章就是主实体对象,评论则是关联对象,一个文章可以对应多个评论,这就是一对多关系。 二、mybatis高级映射一对多查询实现代码 Mybatis中,要实现一对多…

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