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项目中企业微信使用js-sdk时config和agentConfig配置方式详解
Dec 15 Vue.js
Vue中computed和watch有哪些区别
Dec 19 Vue.js
vue 在服务器端直接修改请求的接口地址
Dec 19 Vue.js
vue3+typeScript穿梭框的实现示例
Dec 29 Vue.js
如何在Vue项目中添加接口监听遮罩
Jan 25 Vue.js
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
Feb 23 Vue.js
vue完美实现el-table列宽自适应
May 08 Vue.js
如何使用vue3打造一个物料库
May 08 Vue.js
vue基于Teleport实现Modal组件
May 31 Vue.js
Vue实现导入Excel功能步骤详解
Jul 03 Vue.js
vue实现移动端div拖动效果
Mar 03 Vue.js
如何vue使用el-table遍历循环表头和表体数据
Apr 26 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
3种平台下安装php4经验点滴
2006/10/09 PHP
PHP动态页生成静态页的3种常用方法
2014/11/13 PHP
PHP CURL中传递cookie的方法步骤
2019/05/09 PHP
做网页的一些技巧(续)
2007/02/01 Javascript
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
2010/03/07 Javascript
jquery选择器之内容过滤选择器详解
2014/01/27 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
jquery表单验证插件formValidator使用方法
2016/04/01 Javascript
微信小程序  生命周期详解
2016/10/27 Javascript
js/jq仿window文件夹移动/剪切/复制等操作代码
2017/03/08 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
微信小程序组件之srcoll-view的详解
2017/10/19 Javascript
JS实现仿微信支付弹窗功能
2018/06/25 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
JS sort方法基于数组对象属性值排序
2020/07/10 Javascript
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
Python中常见的异常总结
2018/02/20 Python
Python 实现网页自动截图的示例讲解
2018/05/17 Python
使用TensorFlow对图像进行随机旋转的实现示例
2020/01/20 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
2020/02/27 Python
python代码实现猜拳小游戏
2020/11/30 Python
美国求婚钻戒网站:Super Jeweler
2016/08/27 全球购物
Lancome兰蔻官方旗舰店:来自法国的世界知名美妆品牌
2018/06/14 全球购物
Nip + Fab官网:英国美容品牌
2019/08/26 全球购物
JD Sports荷兰:英国领先的运动时尚零售商
2020/03/13 全球购物
自荐信格式技巧有哪些呢
2013/11/19 职场文书
入股协议书范本
2014/04/14 职场文书
中华魂演讲稿
2014/05/13 职场文书
爱护公共设施倡议书
2014/08/29 职场文书
学校拾金不昧表扬信
2015/01/16 职场文书
爱心捐赠活动简讯
2015/07/20 职场文书
新兵入伍决心书
2015/09/22 职场文书
Mysql MVCC机制原理详解
2021/04/20 MySQL
Vue实现tab导航栏并支持左右滑动功能
2021/06/28 Vue.js
解决Laravel使用验证时跳转到首页的问题
2021/11/17 PHP
Redis数据同步之redis shake的实现方法
2022/04/21 Redis