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 修改网站图标的方法
Dec 31 Vue.js
vue使用过滤器格式化日期
Jan 20 Vue.js
Vue实现圆环进度条的示例
Feb 06 Vue.js
Vue如何实现变量表达式选择器
Feb 18 Vue.js
原生JS封装vue Tab切换效果
Apr 28 Vue.js
vue使用节流函数的踩坑实例指南
May 20 Vue.js
Vue实现动态查询规则生成组件
May 27 Vue.js
使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)
Jun 09 Vue.js
Vue实现导入Excel功能步骤详解
Jul 03 Vue.js
前端vue+express实现文件的上传下载示例
Feb 18 Vue.js
vue3引入highlight.js进行代码高亮的方法实例
Apr 08 Vue.js
vue3.0 数字翻牌组件的使用方法详解
Apr 20 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 in_array 函数使用说明与in_array需要注意的地方说明
2010/04/13 PHP
新手菜鸟必读:session与cookie的区别
2013/08/22 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
2015/06/20 PHP
JS 判断undefined的实现代码
2009/11/26 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
2011/09/13 Javascript
innerHTML,outerHTML,innerText,outerText的用法及区别解析
2013/12/16 Javascript
Jquery中的层次选择器与find()的区别示例介绍
2014/02/20 Javascript
使用javascript实现简单的选项卡切换
2015/01/09 Javascript
js实现Form栏显示全格式时间时钟效果代码
2015/08/19 Javascript
JavaScript数值千分位格式化的两种简单实现方法
2016/08/01 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
2017/03/09 Javascript
详解Nodejs之静态资源处理
2017/06/05 NodeJs
JS实现的集合去重,交集,并集,差集功能示例
2018/03/13 Javascript
Python 3实战爬虫之爬取京东图书的图片详解
2017/10/09 Python
pandas 条件搜索返回列表的方法
2018/10/30 Python
Mac下Anaconda的安装和使用教程
2018/11/29 Python
python将类似json的数据存储到MySQL中的实例
2019/07/12 Python
详解使用django-mama-cas快速搭建CAS服务的实现
2019/10/30 Python
从pandas一个单元格的字符串中提取字符串方式
2019/12/17 Python
Python reversed函数及使用方法解析
2020/03/17 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
2020/04/07 Python
全球烹饪课程的领先预订平台:Cookly
2020/01/28 全球购物
什么是典型的软件三层结构?软件设计为什么要分层?软件分层有什么好处?
2012/03/14 面试题
初一体育教学反思
2014/01/29 职场文书
社区春季防火方案
2014/06/02 职场文书
企业总经理任命书
2014/06/05 职场文书
2014年管理工作总结
2014/11/22 职场文书
技能培训通讯稿
2015/07/18 职场文书
运动会通讯稿300字
2015/07/20 职场文书
2016年小学生寒假总结
2015/10/10 职场文书
高中诗歌鉴赏教学反思
2016/02/16 职场文书
爱岗敬业事迹材料
2019/06/20 职场文书
《家》读后感:万惜拯救,冷暖自知
2019/09/25 职场文书
【超详细】八大排序算法的各项比较以及各自特点
2021/03/31 Python
PHP命令行与定时任务
2021/04/01 PHP
Pandas||过滤缺失数据||pd.dropna()函数的用法说明
2021/05/14 Python