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 20 Vue.js
Vue实现购物小球抛物线的方法实例
Nov 22 Vue.js
vue + el-form 实现的多层循环表单验证
Nov 25 Vue.js
如何实现vue的tree组件
Dec 03 Vue.js
vue基于Echarts的拖拽数据可视化功能实现
Dec 04 Vue.js
vue3.0自定义指令(drectives)知识点总结
Dec 27 Vue.js
vue-resource 拦截器interceptors使用详解
Jan 18 Vue.js
Vue 实现可视化拖拽页面编辑器
Feb 01 Vue.js
学习 Vue.js 遇到的那些坑
Feb 02 Vue.js
关于vue中如何监听数组变化
Apr 28 Vue.js
Vue组件化(ref,props, mixin,.插件)详解
May 15 Vue.js
Vue 打包后相对路径的引用问题
Jun 05 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学习之PHP变量
2006/10/09 PHP
定制404错误页面,并发信给管理员的程序
2006/10/09 PHP
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
2012/07/31 PHP
如何用php生成扭曲及旋转的验证码图片
2013/06/07 PHP
PHP简单实现“相关文章推荐”功能的方法
2014/07/19 PHP
PHP实现的文件浏览器功能简单示例
2019/09/12 PHP
jquery photoFrame 图片边框美化显示插件
2010/06/28 Javascript
javascript中length属性的探索
2011/07/31 Javascript
ExtJs纵坐标值重复问题的解决方法
2014/02/27 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
2017/05/09 Javascript
AngularJS读取JSON及XML文件的方法示例
2017/05/25 Javascript
bootstrap是什么_动力节点Java学院整理
2017/07/14 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
2017/09/22 jQuery
浅析Visual Studio Code断点调试Vue
2018/02/27 Javascript
对vue事件的延迟执行实例讲解
2018/08/28 Javascript
微信小程序http连接访问解决方案的示例
2018/11/05 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
2018/11/05 Javascript
vue缓存的keepalive页面刷新数据的方法
2019/04/23 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
基于vue 动态菜单 刷新空白问题的解决
2020/08/06 Javascript
vue循环中点击选中再点击取消(单选)的实现
2020/09/10 Javascript
Python 实现删除某路径下文件及文件夹的实例讲解
2018/04/24 Python
详解Python最长公共子串和最长公共子序列的实现
2018/07/07 Python
Python判断一个三位数是否为水仙花数的示例
2018/11/13 Python
深入了解Django View(视图系统)
2019/07/23 Python
关于Numpy数据类型对象(dtype)使用详解
2019/11/27 Python
python实现的Iou与Giou代码
2020/01/18 Python
python 实现波浪滤镜特效
2020/12/02 Python
印度最大的网上花店:Ferns N Petals(鲜花、礼品和蛋糕)
2017/10/16 全球购物
物流仓储实习自我鉴定
2013/09/25 职场文书
新学期家长寄语
2014/01/19 职场文书
治超工作实施方案
2014/05/04 职场文书
党员自我剖析材料
2014/08/31 职场文书
国际残疾人日广播稿范文
2014/10/09 职场文书
Redis基本数据类型Zset有序集合常用操作
2022/06/01 Redis
react中useState使用:如何实现在当前表格直接更改数据
2022/08/05 Javascript