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中通过render函数给子组件设置ref操作
Nov 17 Vue.js
vue项目中openlayers绘制行政区划
Dec 24 Vue.js
vue 使用rules对表单字段进行校验的步骤
Dec 25 Vue.js
利用Vue实现简易播放器的完整代码
Dec 30 Vue.js
Vue看了就会的8个小技巧
Jan 21 Vue.js
Vue实现摇一摇功能(兼容ios13.3以上)
Jan 26 Vue.js
vue实现轮播图帧率播放
Jan 26 Vue.js
Vue和Flask通信的实现
May 19 Vue.js
详解Vue中$props、$attrs和$listeners的使用方法
Feb 18 Vue.js
vue如何实现关闭对话框后刷新列表
Apr 08 Vue.js
vue选项卡切换的实现案例
Apr 11 Vue.js
vue实现省市区联动 element-china-area-data插件
Apr 22 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操作MongoDB时的整数问题及对策说明
2011/05/02 PHP
云网广告中的代码,提示出错,大家找找
2006/11/21 Javascript
Javascript 生成指定范围数值随机数
2009/01/09 Javascript
Jqyery中同等与js中windows.onload的应用
2011/05/10 Javascript
动态的改变IFrame的高度实现IFrame自动伸展适应高度
2012/12/28 Javascript
深入理解JavaScript 闭包究竟是什么
2013/04/12 Javascript
在页面中输出当前客户端时间javascript实例代码
2016/03/02 Javascript
javascript实现可键盘控制的抽奖系统
2016/03/10 Javascript
javascript中获取class的简单实现
2016/07/12 Javascript
第一次接触神奇的Bootstrap基础排版
2016/07/26 Javascript
jQuery实现Select下拉列表进行状态选择功能
2017/03/30 jQuery
jQuery Validate表单验证插件实现代码
2017/06/08 jQuery
Vue.js分页组件实现:diVuePagination的使用详解
2018/01/10 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
python pandas 如何替换某列的一个值
2018/06/09 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
python实现自动解数独小程序
2019/01/21 Python
python爬虫基础教程:requests库(二)代码实例
2019/04/09 Python
在python中,使用scatter绘制散点图的实例
2019/07/03 Python
利用Python检测URL状态
2019/07/31 Python
Python:slice与indices的用法
2019/11/25 Python
聪明的粉丝购买门票的地方:TickPick
2018/03/09 全球购物
Internal修饰符有什么含义
2013/07/10 面试题
多媒体编辑专业毕业生推荐信
2013/11/05 职场文书
大学系主任推荐信范文
2013/12/24 职场文书
查环查孕证明
2014/01/10 职场文书
大学军训感言600字
2014/02/25 职场文书
幼儿园中班评语大全
2014/04/17 职场文书
文明家庭先进事迹材料
2014/05/14 职场文书
图书馆志愿者活动总结
2014/06/27 职场文书
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
2016民族团结先进个人事迹材料
2016/02/26 职场文书
使用这 6个Vue加载动画库来减少我们网站的跳出率
2021/05/18 Vue.js
给numpy.array增加维度的超简单方法
2021/06/02 Python
Python中OpenCV实现简单车牌字符切割
2021/06/11 Python