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实现创建试卷相关功能(实例代码)
Dec 07 Vue.js
vue中封装axios并实现api接口的统一管理
Dec 25 Vue.js
vue实现登录功能
Dec 31 Vue.js
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
Jan 13 Vue.js
详解vue3中组件的非兼容变更
Mar 03 Vue.js
vue+flask实现视频合成功能(拖拽上传)
Mar 04 Vue.js
使用这 6个Vue加载动画库来减少我们网站的跳出率
May 18 Vue.js
vue使用节流函数的踩坑实例指南
May 20 Vue.js
vite+vue3.0+ts+element-plus快速搭建项目的实现
Jun 24 Vue.js
Vue提供的三种调试方式你知道吗
Jan 18 Vue.js
vue动态绑定style样式
Apr 20 Vue.js
详解Vue3使用axios的配置教程
Apr 29 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中的超全局变量
2006/10/09 PHP
PHP的单引号和双引号 字符串效率
2009/05/27 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
2010/05/10 PHP
header中Content-Disposition的作用与使用方法
2012/06/13 PHP
一个严格的PHP Session会话超时时间设置方法
2014/06/10 PHP
ThinkPHP写数组插入与获取最新插入数据ID实例
2014/11/03 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
2016/03/15 PHP
Yii2结合Workerman的websocket示例详解
2018/09/10 PHP
改善用户体验的五款jQuery插件分享
2011/05/22 Javascript
document.documentElement和document.body区别介绍
2013/09/16 Javascript
js 实现浏览历史记录示例
2014/04/20 Javascript
浅谈jquery设置和获得checkbox选中的问题
2016/08/19 Javascript
学习使用jQuery表单验证插件和日历插件
2017/02/13 Javascript
JavaScript面向对象程序设计创建对象的方法分析
2018/08/13 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
[04:31]2016国际邀请赛中国区预选赛妖精采访
2016/06/27 DOTA
[40:29]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第一场
2018/04/10 DOTA
详解Python中的装饰器、闭包和functools的教程
2015/04/02 Python
python实现求最长回文子串长度
2018/01/22 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
2019/01/07 Python
十分钟搞定pandas(入门教程)
2019/06/21 Python
python线程中的同步问题及解决方法
2019/08/29 Python
python3的UnicodeDecodeError解决方法
2019/12/20 Python
python 安装impala包步骤
2020/03/28 Python
美国顶级户外凉鞋品牌:Chacos
2017/03/27 全球购物
英国Boots旗下太阳镜网站:Boots Designer Sunglasses
2018/07/07 全球购物
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
测量实习生自我鉴定
2013/09/19 职场文书
旷课检讨书2000字
2014/01/14 职场文书
计生办班子群众路线教育实践活动个人对照检查材料思想汇报
2014/10/04 职场文书
优秀少先队员事迹材料
2014/12/24 职场文书
小学毕业感言200字
2015/07/30 职场文书
神州牡丹园的导游词
2019/11/20 职场文书
详细了解java监听器和过滤器
2021/07/09 Java/Android
Prometheus 监控MySQL使用grafana展示
2021/08/30 MySQL
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
2022/04/18 MySQL