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日

相关文章

  • 详解JS判断页面是在手机端还是在PC端打开的方法

    下面详细介绍一下如何判断页面是在手机端还是在PC端打开,并提供两条示例说明。 方法一:使用UA判断 UA(UserAgent)是指HTTP请求头中的一部分,用于标识客户端的一些信息,比如用户的设备类型、浏览器型号等等。因此,我们可以通过判断UA中的关键字来确定页面访问者的设备类型。下面是实现的代码: const isMobile = /iPhone|iPad…

    JavaScript 2023年6月11日
    00
  • js自动生成对象的属性示例代码

    下面我来详细讲解一下”js自动生成对象的属性示例代码”的攻略。 标题 首先,在回答问题之前,我们需要在语句前加上标题。此篇题目的正确标题应该是: js自动生成对象的属性示例代码完整攻略 描述 对象是JavaScript中的重要组成部分,我们可以使用Object关键字创建对象,在对象中定义一些属性。而有时候我们需要自动化地生成对象或者定义对象的属性。那么如何实…

    JavaScript 2023年6月11日
    00
  • JS使用插件cryptojs进行加密解密数据实例

    JS使用插件cryptojs进行加密解密数据实例 1. 什么是cryptojs? cryptojs是一个JavaScript加密库,它提供了各种加密算法和哈希算法,如AES、DES、TripleDES、RC4、MD5、SHA1、SHA256等。cryptojs是一个标准的ES6模块,支持在浏览器和Node.js环境中使用。 2. 安装和引用cryptojs …

    JavaScript 2023年5月19日
    00
  • JavaScript 基础问答二

    下面是关于“JavaScript 基础问答二”的完整攻略。 问题1:如何判断一个变量是否为数组类型? 判断一个变量是否为数组可以使用Array.isArray()方法,例如: const arr = [1, 2, 3]; console.log(Array.isArray(arr)); // 输出 true 问题2:如何将一个字符串转换为数字类型? 可以使用…

    JavaScript 2023年5月18日
    00
  • 关于JavaScript数组你所不知道的3件事

    关于JavaScript数组你所不知道的3件事 本文将介绍三个在JavaScript中数组的使用中可能相对容易被忽视但实际上很有用的特性。 1. 数组长度不是只读属性 在JavaScript中,数组长度可以被更改,而且这并不会影响已经存在的元素。我们可以通过调用Array.prototype.length来获取数组长度,也可以通过设置该属性来更改数组长度。 …

    JavaScript 2023年5月18日
    00
  • js读取本地文件的实例

    下面是详细的讲解和示例说明。 什么是读取本地文件的实例? 在网页中,我们有时需要读取本地的文件,比如图片、音频、视频等等。而JavaScript是不允许直接访问本地文件系统的,因为这会给用户的计算机带来安全隐患。但是,如果我们得到了用户选择的文件,那么我们就可以通过操作这个文件对象来读取它的内容。 如何读取本地文件? 前提条件:用户选择了文件 我们可以通过以…

    JavaScript 2023年5月27日
    00
  • js实现动画特效的文字链接鼠标悬停提示的方法

    下面我来详细讲解下“js实现动画特效的文字链接鼠标悬停提示的方法”: 1. 实现动画特效的方法: 一般情况下,我们可以通过 CSS 的 transition 或者 animation 属性实现动画效果。首先,我们可以定义一个类名,比如:.animated,用来标记需要实现动画效果的元素。代码如下: .animated { transition: all .3…

    JavaScript 2023年6月11日
    00
  • js动态生成form 并用ajax方式提交的实现方法

    下面我将为你详细讲解“js动态生成form 并用ajax方式提交的实现方法”的完整攻略。 1. 创建Form表单 通过JavaScript代码创建一个空白的表单对象,可以通过以下方式: var form = document.createElement(‘form’); 接下来设置表单的相关属性,例如表单的方法、action、enctype等,示例代码如下:…

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