vue路由实现登录拦截


Posted in Vue.js onMarch 24, 2021

一、概述

在项目开发中每一次路由的切换或者页面的刷新都需要判断用户是否已经登录,前端可以判断,后端也会进行判断的,我们前端最好也进行判断。

vue-router提供了导航钩子:全局前置导航钩子 beforeEach和全局后置导航钩子 afterEach,他们会在路由即将改变前和改变后进行触发。所以判断用户是否登录需要在beforeEach导航钩子中进行判断。

导航钩子有3个参数:

  1、to:即将要进入的目标路由对象;

  2、from:当前导航即将要离开的路由对象;

  3、next :调用该方法后,才能进入下一个钩子函数(afterEach)。

        next()//直接进to 所指路由
        next(false) //中断当前路由
        next('route') //跳转指定路由
        next('error') //跳转错误路由

二、路由导航守卫实现登录拦截

这里用一个空白的vue项目来演示一下,主要有2个页面,分别是首页和登录。

访问首页时,必须要登录,否则跳转到登录页面。

新建一个空白的vue项目,在src\components创建Login.vue

<template>
 <div>这是登录页面</div>
</template>
 
<script>
 export default {
  name: "Login"
 }
</script>
 
<style scoped>
 
</style>

修改src\router\index.js

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import Login from '@/components/Login'
 
 
Vue.use(Router)
 
const router = new Router({
 mode: 'history', //去掉url中的#
 routes: [
 {
  path: '/login',
  name: 'login',
  meta: {
  title: '登录',
  requiresAuth: false, // false表示不需要登录
  },
  component: Login
 },
 {
  path: '/',
  name: 'HelloWorld',
  meta: {
  title: '首页',
  requiresAuth: true, // true表示需要登录
  },
  component: HelloWorld
 },
 
 ]
})
 
// 路由拦截,判断是否需要登录
router.beforeEach((to, from, next) => {
 if (to.meta.title) {
 //判断是否有标题
 document.title = to.meta.title;
 }
 // console.log("title",document.title)
 // 通过requiresAuth判断当前路由导航是否需要登录
 if (to.matched.some(record => record.meta.requiresAuth)) {
 let token = localStorage.getItem('token')
 // console.log("token",token)
 // 若需要登录访问,检查是否为登录状态
 if (!token) {
  next({
  path: '/login',
  query: { redirect: to.fullPath }
  })
 } else {
  next()
 }
 } else {
 next() // 确保一定要调用 next()
 }
})
 
export default router;

说明:

在每一个路由中,加入了meta。其中requiresAuth字段,用来标识是否需要登录。

在router.beforeEach中,做了token判断,为空时,跳转到登录页面。

访问首页

http://localhost:8080

会跳转到

http://localhost:8080/login?redirect=%2F

效果如下:

vue路由实现登录拦截

打开F12,进入console,手动写入一个token

localStorage.setItem('token', '12345678910')

效果如下:

vue路由实现登录拦截

再次访问首页,就可以正常访问了。

vue路由实现登录拦截

打开Application,删除Local Storage里面的值,右键,点击Clear即可

vue路由实现登录拦截

刷新页面,就会跳转到登录页面。

怎么样,是不是很简单呢!

Vue.js 相关文章推荐
Vue开发中常见的套路和技巧总结
Nov 24 Vue.js
详解vue-cli项目在IE浏览器打开报错解决方法
Dec 10 Vue.js
vue3.0实现插件封装
Dec 14 Vue.js
vue 导航守卫和axios拦截器有哪些区别
Dec 19 Vue.js
Vue实现简易购物车页面
Dec 30 Vue.js
vue keep-alive的简单总结
Jan 25 Vue.js
vue-cropper插件实现图片截取上传组件封装
May 27 Vue.js
vue基于Teleport实现Modal组件
May 31 Vue.js
vue项目打包后路由错误的解决方法
Apr 13 Vue.js
vue3.0 数字翻牌组件的使用方法详解
Apr 20 Vue.js
vue如何清除浏览器历史栈
May 25 Vue.js
vue项目实现分页效果
Mar 24 #Vue.js
vue实现倒计时功能
Mar 24 #Vue.js
vue 中 get / delete 传递数组参数方法
Mar 23 #Vue.js
使用Vue.js和MJML创建响应式电子邮件
vue+flask实现视频合成功能(拖拽上传)
Mar 04 #Vue.js
vue打开新窗口并实现传参的图文实例
Mar 04 #Vue.js
Vue-router编程式导航的两种实现代码
Mar 04 #Vue.js
You might like
解析thinkphp中的M()与D()方法的区别
2013/06/22 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
php设置静态内容缓存时间的方法
2014/12/01 PHP
Thinkphp无限级分类代码
2015/11/11 PHP
twig里使用js变量的方法
2016/02/05 PHP
修改Laravel5.3中的路由文件与路径
2016/08/10 PHP
微信公众平台开发教程⑥ 微信开发集成类的使用图文详解
2019/04/10 PHP
JS event使用方法详解
2008/04/28 Javascript
Mootools 1.2教程(2) DOM选择器
2009/09/14 Javascript
ajax 缓存 问题 requestheader
2010/08/01 Javascript
jQuery 获取浏览器所在的IP地址的小例子
2013/11/08 Javascript
JavaScript动态插入script的基本思路及实现函数
2013/11/11 Javascript
文本框水印提示效果的简单实现代码
2014/02/22 Javascript
基于JS如何实现类似QQ好友头像hover时显示资料卡的效果(推荐)
2016/06/09 Javascript
js制作网站首页图片轮播特效代码
2016/08/30 Javascript
jQuery ajax动态生成table功能示例
2017/06/14 jQuery
vue axios整合使用全攻略
2018/05/24 Javascript
小程序实现列表点赞功能
2018/11/02 Javascript
webpack 从指定入口文件中提取公共文件的方法
2018/11/13 Javascript
Mint UI组件库CheckList使用及踩坑总结
2018/12/20 Javascript
Windows系统下安装Python的SSH模块教程
2015/02/05 Python
matplotlib绘制动画代码示例
2018/01/02 Python
Python的Tqdm模块实现进度条配置
2021/02/24 Python
利用Opencv实现图片的油画特效实例
2021/02/28 Python
html5 迷宫游戏(碰撞检测)实例一
2013/07/25 HTML / CSS
HTML5新增form控件和表单属性实例代码详解
2019/05/15 HTML / CSS
SKECHERS斯凯奇中国官网:来自美国的运动休闲品牌
2018/11/14 全球购物
本科生求职简历的自我评价
2013/10/21 职场文书
专科毕业生就业推荐信
2013/11/01 职场文书
护理学应聘自荐书范文
2014/02/05 职场文书
推广活动策划方案
2014/08/23 职场文书
党员民主生活会个人整改措施材料
2014/09/16 职场文书
平安家庭事迹材料
2014/12/20 职场文书
2016国庆节活动宣传语
2015/11/25 职场文书
如何使用php生成zip压缩包
2021/04/21 PHP