vue路由实现登录拦截

yizhihongxing

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 玩转Date对象(实例讲解)

    Javascript 玩转 Date 对象(实例讲解) 日期和时间在 Javascript 中有着非常重要的地位,而 Date 对象则是用于处理日期和时间的核心对象。在本攻略中,我们将介绍 Date 对象的常用的方法和属性,并提供一些在实际项目中可能会用到的示例供参考。 初始化 Date 对象 在创建 Date 对象时,可以使用以下语句: var date …

    JavaScript 2023年6月10日
    00
  • javascript中replace使用方法总结

    JavaScript中replace使用方法总结 replace()方法是JavaScript中字符串对象的一个常用方法,其作用是在字符串中搜索指定的子字符串或者正则表达式,并将其替换为新的子字符串。在本篇文章中,我们将对replace()方法进行详细的讲解和总结。 基本使用 replace()方法的基本语法如下: string.replace(search…

    JavaScript 2023年5月28日
    00
  • js检测iframe是否加载完成的方法

    当一个页面中嵌入了一个iframe时,有时我们需要在iframe加载完成后执行一些特定的操作。这时候,我们就需要检测iframe是否已经加载完成。下面是几种js检测iframe是否加载完成的方法。 方法一:使用iframe的load事件 可以通过给iframe绑定load事件来检测iframe是否加载完成。示例代码如下: var iframe = docum…

    JavaScript 2023年5月27日
    00
  • 详解angularjs获取元素以及angular.element()用法

    首先在讲解“详解angularjs获取元素以及angular.element()用法”的完整攻略前,我们需要了解一些前置知识。 前置知识 1. AngularJS 框架 AngularJS是一款由Google主导开发的前端框架。AngularJS的主要优点有: MVVM模式,分离了视图和逻辑,使代码更易维护。 具有依赖注入功能,这实现了组件之间的松散耦合,增…

    JavaScript 2023年6月10日
    00
  • JS匿名函数类生成方式实例分析

    JS匿名函数类生成方式是指通过使用匿名函数的方式创建JS类,使得该类的定义与创建同时进行,并在全局作用域中生效。这种方式的优点是可以防止类命名污染和作用域冲突,同时也可以封装类的内部实现。 下面是一个JS匿名函数类的示例代码: var someClass = (function() { var privateVariable = 10; function p…

    JavaScript 2023年5月27日
    00
  • Javascript Date toLocaleTimeString() 方法

    以下是关于JavaScript Date对象的toLocaleTimeString()方法的完整攻略,包括两个示例说明。 JavaScript Date对象的toLocaleTimeString()方法 JavaScript的toLocaleTimeString()方法返回一个表示对象时间部分本地化字符串,该字符串格式根据本地设置而定。该方法可以接受一个或多…

    JavaScript 2023年5月11日
    00
  • Canvas drawImage方法实现图片压缩详解

    Canvas的drawImage方法可以用来实现图片的压缩,下面将详细讲解该方法的使用过程。 drawImage方法简介 Canvas的drawImage方法可以将一个已有的图像绘制到Canvas上。该方法有3种用法: drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight) dra…

    JavaScript 2023年6月10日
    00
  • Javascript闭包演示代码小结

    Javascript闭包演示代码小结 Javascript中的闭包是一个非常重要的概念,许多初学者对此有些困惑,下面是我对闭包的探究过程及代码演示,希望对大家有所帮助。 什么是闭包 闭包是指有权访问另一个函数作用域中的变量的函数。 在Javascript中,函数是第一类对象,可以像普通变量一样传递,所以函数中定义的变量在函数外部也可以访问,但是如果在外部将函…

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