vue路由实现登录拦截

vue路由实现登录拦截是常见的前端开发技巧之一,有利于确保用户访问权限的安全性。下面我将为大家介绍如何利用vue路由实现登录拦截。具体步骤如下:

1. 使用vue-router实现路由拦截

在Vue Router中,可以通过导航钩子函数实现路由拦截,拦截器可以在跳转之前或之后执行一些操作,例如更改路由,验证用户权限等。

  • 前置守卫(beforeEach)

在跳转到下一个路由之前执行的导航守卫。可以使用router.beforeEach方法注册一个全局前置守卫,当用户访问需要登录的页面时,可以在beforeEach方法中判断用户是否登录。如果用户未登录,则跳转到登录页面。

const router = new VueRouter({
  routes: [...],
});

router.beforeEach((to, from, next) => {
  const isLogin = localStorage.getItem('token') ? true: false; // 判断是否登录
  if (to.path === '/login') {
    next();
  } else {
    isLogin ? next() : next('/login'); // 如果没有登录则跳转到登陆界面
  }
});
  • 后置钩子(afterEach)

在跳转到下一个路由之后执行的导航守卫。可以使用router.afterEach方法注册一个全局后置钩子,当用户跳转到后,可以在afterEach方法中进行一些操作。

2. 通过路由守卫判断是否登录

import Vue from 'vue';
import Router from 'vue-router';
import Home from '../views/Home.vue';
import Login from '../views/Login.vue';

Vue.use(Router);

const router = new Router({
  routes: [
    {
      path: '/',
      name: 'home',
      component: Home,
      meta: {
        requiresAuth: true // 需要登录访问的页面
      }
    },
    {
      path: '/login',
      name: 'login',
      component: Login,
    },
  ]
});

router.beforeEach((to, from, next) => {
  const token = localStorage.getItem('token'); // 获取本地存储的token
  if(to.meta.requiresAuth){ // 判断是否需要登录访问
    if(token){
      next();// 进入路由
    }else{
      next({
        path:'/login',
        query:{redirect: to.fullPath} // 记录当前路由路径
      });
    }
  }else{
    next();
  }
});

export default router;

示例1

import Vue from 'vue';
import Router from 'vue-router';
import Home from '../views/Home.vue';
import About from '../views/About.vue';
import Login from '../views/Login.vue';

Vue.use(Router);

const router = new Router({
  routes: [
    {
      path: '/',
      name: 'home',
      component: Home,
      meta: {
        requiresAuth: true // 需要登录访问的页面
      }
    },
    {
      path: '/about',
      name: 'about',
      component: About,
    },
    {
      path: '/login',
      name: 'login',
      component: Login,
    },
  ]
});

router.beforeEach((to, from, next) => {
  const token = localStorage.getItem('token'); // 获取本地存储的token
  if(to.meta.requiresAuth){ // 判断是否需要登录访问
    if(token){
      next();// 进入路由
    }else{
      next({
        path:'/login',
        query:{redirect: to.fullPath} // 记录当前路由路径
      });
    }
  }else{
    next();
  }
});

export default router;

在这个示例中,Home组件是需要用户登录才能访问的,因此我们使用了meta.requiresAuth: true表示需要验证。

示例2

import Vue from 'vue';
import Router from 'vue-router';
import Index from '../views/Index.vue';
import User from '../views/User.vue';
import Login from '../views/Login.vue';

Vue.use(Router);

const router = new Router({
  routes: [
    {
      path: '/',
      name: 'index',
      component: Index,
    },
    {
      path: '/user',
      name: 'user',
      component: User,
      meta: {
        requiresAuth: true // 需要登录访问的页面
      }
    },
    {
      path: '/login',
      name: 'login',
      component: Login,
    },
  ]
});

router.beforeEach((to, from, next) => {
  const token = localStorage.getItem('token'); // 获取本地存储的token
  if(to.meta.requiresAuth){ // 判断是否需要登录访问
    if(token){
      next();// 进入路由
    }else{
      next({
        path:'/login',
        query:{redirect: to.fullPath} // 记录当前路由路径
      });
    }
  }else{
    next();
  }
});

export default router;

在这个示例中,User组件是需要用户登录才能访问的,因此我们使用了meta.requiresAuth: true表示需要验证。

以上就是使用vue路由实现登录拦截的完整攻略,希望能为大家提供帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue路由实现登录拦截 - Python技术站

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

相关文章

  • 扩展JavaScript功能的正确方法(译文)

    首先需要解释一下什么是扩展JavaScript功能的正确方法,其实就是指通过使用第三方库或者自己编写代码模块的方式增强基本的JavaScript功能。以下是详细的攻略: 1. 了解JavaScript基础知识 在进行任何扩展功能之前,首先要掌握JavaScript的基础知识,了解它的语法、变量、函数、数据类型等基本元素,只有这样才能更好地扩展它的功能。推荐阅…

    JavaScript 2023年5月18日
    00
  • Javascript删除数组里的某个元素

    当需要删除Javascript数组中的某个元素时,可以利用splice()方法。 splice()方法有两个参数:第一个是要删除的元素的位置,第二个是要删除的元素的数量。 示例1:删除数组中指定位置的元素 const arr = [‘A’, ‘B’, ‘C’, ‘D’, ‘E’]; arr.splice(2, 1); // 删除位置为2的元素,数量为1 co…

    JavaScript 2023年5月27日
    00
  • IE下Ajax缓存问题的快速解决方法(get方式)

    针对“IE下Ajax缓存问题的快速解决方法(get方式)”,我给出以下完整攻略: 1. 什么是IE下Ajax缓存问题 在IE浏览器下,ajax请求数据时,有时候会出现缓存的问题。即,IE会将ajax请求结果进行缓存,导致下一次请求相同的URL时,不再发送真正的ajax请求,而是直接使用缓存中的结果。这样一来,就会造成请求数据不够及时、及时性不够高的问题。 2…

    JavaScript 2023年6月11日
    00
  • Javascript发送AJAX请求实例代码

    当需要通过Javascript与服务器进行异步数据交互时,就需要使用AJAX技术。本篇攻略将提供一个基本的AJAX请求代码示例以及一个带参数的AJAX请求代码示例。 AJAX请求示例 步骤一:创建XMLHttpRequest对象 AJAX通过XMLHttpRequest对象与服务器进行数据交互。在Javascript中,可以通过以下代码创建XMLHttpRe…

    JavaScript 2023年6月11日
    00
  • javascript Function函数理解与实战

    JavaScript Function 函数理解与实战 1. 概述 函数是 JavaScript 中的重要概念之一。它是一块代码,用于完成特定的任务。函数通常有一个名称,可以提高代码的重用率,使代码更易于维护。在 JavaScript 中,函数也是第一类对象,也就是说,它们可以作为参数传递,返回值以及保存到变量中。 2. 基本语法 2.1 函数声明 函数通常…

    JavaScript 2023年5月27日
    00
  • JS中正则表达式要注意lastIndex属性

    JavaScript中的正则表达式是一种特殊的对象类型,用来匹配字符串中的模式。在正则表达式匹配时,需要注意到lastIndex属性。 lastIndex属性介绍 lastIndex是RegExp对象的一个属性,表示正则表达式匹配下一个字符的位置。当进行全局匹配时,每次匹配都是从上一次匹配完成后lastIndex处继续查找。当进行非全局匹配时,lastInd…

    JavaScript 2023年6月10日
    00
  • JavaScript 中有关数组对象的方法(详解)

    JavaScript 中有关数组对象的方法(详解) 数组是 JavaScript 中非常常用的数据结构。在 JavaScript 中,数组对象有许多方法可以使用,比如添加元素、删除元素、查找元素等等。本文将详细介绍 JavaScript 中有关数组对象的方法。 数组的创建 在 JavaScript 中创建一个数组对象有多种方法: 使用字面量表达式 const…

    JavaScript 2023年5月27日
    00
  • Next.js项目实战踩坑指南(笔记)

    Next.js项目实战踩坑指南(笔记) 介绍 Next.js是一个React框架,它能够帮助开发者快速构建React应用,并集成了很多有用的特性和插件,例如服务器端渲染、静态文件生成等等。在使用Next.js进行开发时,可能会遇到一些问题和坑,这篇文章主要是讲解在实际开发中可能遇到的一些问题,并提供解决方案。 坑1: 如何在Next.js中使用自定义路由 默…

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