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 18 Vue.js
vue实现图片裁剪后上传
Dec 16 Vue.js
vue项目中openlayers绘制行政区划
Dec 24 Vue.js
vue自定义组件实现双向绑定
Jan 13 Vue.js
手动实现vue2.0的双向数据绑定原理详解
Feb 06 Vue.js
详解vite+ts快速搭建vue3项目以及介绍相关特性
Feb 25 Vue.js
vue路由实现登录拦截
Mar 24 Vue.js
vue完美实现el-table列宽自适应
May 08 Vue.js
vue实现可拖拽的dialog弹框
May 13 Vue.js
vue基于Teleport实现Modal组件
May 31 Vue.js
vue ref如何获取子组件属性值
Mar 31 Vue.js
vue cli4中mockjs在dev环境和build环境的配置详情
Apr 06 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连接数据库代码应用分析
2011/05/29 PHP
php中对2个数组相加的函数
2011/06/24 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
PHP+Ajax实时自动检测是否联网的方法
2015/07/01 PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
2018/04/20 PHP
浅谈PHPANALYSIS提取关键字
2019/03/08 PHP
dojo 之基础篇(三)之向服务器发送数据
2007/03/24 Javascript
深入理解JavaScript系列(4) 立即调用的函数表达式
2012/01/15 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
2014/06/12 Javascript
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
2014/08/14 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
详解AngularJS中module模块的导入导出
2015/12/10 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
解决Window10系统下Node安装报错的问题分析
2016/12/13 Javascript
jQuery Collapse1.1.0折叠插件简单使用
2017/08/28 jQuery
jQuery图片查看插件Magnify开发详解
2017/12/25 jQuery
iView框架问题整理小结
2018/10/16 Javascript
vue实现在线翻译功能
2019/09/27 Javascript
vue点击自增和求和的实例代码
2019/11/06 Javascript
Python 不同对象比较大小示例探讨
2014/08/21 Python
Python3实现从指定路径查找文件的方法
2015/05/22 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
2017/08/24 Python
python opencv实现旋转矩形框裁减功能
2018/07/25 Python
python3判断url链接是否为404的方法
2018/08/10 Python
启动Atom并运行python文件的步骤
2018/11/09 Python
python安装scipy的方法步骤
2019/06/26 Python
python识别验证码图片实例详解
2020/02/17 Python
浅谈Django中的QueryDict元素为数组的坑
2020/03/31 Python
浅析数据存储的三种方式 cookie sessionstorage localstorage 的异同
2020/06/04 HTML / CSS
法国亚马逊官方网站:Amazon.fr
2020/12/19 全球购物
军校制空专业毕业生自我鉴定
2013/11/16 职场文书
全国优秀教师事迹材料
2014/08/26 职场文书
机关驾驶员违规检讨书
2014/09/13 职场文书
《秋天的怀念》教学反思
2016/02/17 职场文书
高考满分作文赏析(2篇)
2019/08/12 职场文书
详解python网络进程
2021/06/15 Python