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使用Element实现增删改查+打包的步骤
Nov 25 Vue.js
vue开发chrome插件,实现获取界面数据和保存到数据库功能
Dec 01 Vue.js
vue实现图书管理系统
Dec 29 Vue.js
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
Jan 08 Vue.js
vue element el-transfer增加拖拽功能
Jan 15 Vue.js
Vue实现图书管理案例
Jan 20 Vue.js
vue 动态添加的路由页面刷新时失效的原因及解决方案
Feb 26 Vue.js
Vue-router编程式导航的两种实现代码
Mar 04 Vue.js
vue-cropper插件实现图片截取上传组件封装
May 27 Vue.js
关于Vue中的options选项
Mar 22 Vue.js
vue如何在data中引入图片的正确路径
Jun 05 Vue.js
vue实现简易音乐播放器
Aug 14 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
PHP zlib扩展实现页面GZIP压缩输出
2010/06/17 PHP
iis下php mail函数的sendmail配置方法(官方推荐)
2012/04/25 PHP
php数据结构与算法(PHP描述) 快速排序 quick sort
2012/06/21 PHP
在Debian系统下配置LNMP的教程
2015/07/09 PHP
JS 继承实例分析
2008/11/04 Javascript
JQuery 技巧和窍门整理(8个)
2010/04/22 Javascript
javascript实现数字+字母验证码的简单实例
2014/02/10 Javascript
JS获取Table中td值的方法
2015/03/19 Javascript
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
jQuery实现复制到粘贴板功能
2017/02/11 Javascript
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
解决微信二次分享不显示摘要和图片的问题
2017/08/18 Javascript
详解vue 组件之间使用eventbus传值
2017/10/25 Javascript
使用layui实现树形结构的方法
2019/09/20 Javascript
vue 实现超长文本截取,悬浮框提示
2020/07/29 Javascript
jQuery实现简单QQ聊天框
2020/08/27 jQuery
python发送告警邮件脚本
2018/09/17 Python
python面试题小结附答案实例代码
2019/04/11 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
2019/08/01 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
2019/10/14 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
2020/02/12 Python
python+selenium+PhantomJS抓取网页动态加载内容
2020/02/25 Python
Python3操作YAML文件格式方法解析
2020/04/10 Python
使用sklearn对多分类的每个类别进行指标评价操作
2020/06/11 Python
在网上学习全世界最好的课程:Coursera
2017/11/07 全球购物
美国著名的女性内衣零售商:Frederick’s of Hollywood
2018/02/24 全球购物
Baby Tulai澳大利亚:美国婴儿背带品牌
2018/10/15 全球购物
初中生个人学习的自我评价
2013/12/04 职场文书
成功经营餐厅的创业计划书范文
2013/12/26 职场文书
四年级数学上册教学计划
2015/01/20 职场文书
英语邀请函范文
2015/02/02 职场文书
投资公司董事长岗位职责
2015/04/16 职场文书
总经理聘用协议书
2015/09/21 职场文书
2016年敬老月活动总结
2016/04/05 职场文书
SQL实现LeetCode(176.第二高薪水)
2021/08/04 MySQL
Python sklearn分类决策树方法详解
2022/09/23 Python