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实现禁止浏览器记住密码功能的示例代码
Feb 03 Vue.js
Vue如何实现变量表达式选择器
Feb 18 Vue.js
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
Mar 01 Vue.js
vue实现可移动的悬浮按钮
Mar 04 Vue.js
vite+vue3.0+ts+element-plus快速搭建项目的实现
Jun 24 Vue.js
vue3中provide && inject的使用
Jul 01 Vue.js
一定要知道的 25 个 Vue 技巧
Nov 02 Vue.js
Vue自定义铃声提示音组件的实现
Jan 22 Vue.js
Vue如何清空对象
Mar 03 Vue.js
关于Vue中的options选项
Mar 22 Vue.js
vue实现可以快进后退的跑马灯组件
Apr 08 Vue.js
vue自定义右键菜单之全局实现
Apr 09 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
dedecms系统常用术语汇总
2007/04/03 PHP
PHP获取网址的顶级域名函数代码
2012/09/24 PHP
最新优化收藏到网摘代码(digg,diigo)
2007/02/07 Javascript
js中parseInt函数浅谈
2013/07/31 Javascript
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
node.js开机自启动脚本文件
2014/12/24 Javascript
JS 循环li添加点击事件 (闭包的应用)
2016/12/10 Javascript
微信小程序 引用其他js文件实现代码
2017/02/22 Javascript
Javascript 链式作用域详细介绍
2017/02/23 Javascript
深入解析js轮播插件核心代码的实现过程
2017/04/14 Javascript
基于JavaScript实现弹幕特效
2020/08/27 Javascript
浅谈Vue网络请求之interceptors实际应用
2018/02/28 Javascript
基于vue2.0动态组件及render详解
2018/03/17 Javascript
vue实现打印功能的两种方法
2018/09/07 Javascript
vue多级复杂列表展开/折叠及全选/分组全选实现
2018/11/05 Javascript
JQuery模拟实现网页中自定义鼠标右键菜单功能
2018/11/14 jQuery
详解解决小程序中webview页面多层history返回问题
2019/08/20 Javascript
NodeJS http模块用法示例【创建web服务器/客户端】
2019/11/05 NodeJs
vue简单封装axios插件和接口的统一管理操作示例
2020/02/02 Javascript
[01:18:45]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第三场2月1日
2021/03/11 DOTA
Python将xml和xsl转换为html的方法
2015/03/10 Python
django从请求到响应的过程深入讲解
2018/08/01 Python
WxPython建立批量录入框窗口
2019/02/27 Python
Python中函数的返回值示例浅析
2019/08/28 Python
python3 正则表达式基础廖雪峰
2020/03/25 Python
酒吧副总经理岗位职责
2013/12/10 职场文书
电气工程及自动化专业自荐书范文
2013/12/18 职场文书
给老婆的婚前保证书
2014/02/01 职场文书
校园安全广播稿
2014/02/08 职场文书
情况说明书格式范文
2014/05/06 职场文书
师德师风承诺书
2014/05/23 职场文书
2014乡镇班子个人对照检查材料思想汇报
2014/09/26 职场文书
新闻稿标题
2015/07/18 职场文书
数学复习课教学反思
2016/02/18 职场文书
基于Redis实现分布式锁的方法(lua脚本版)
2021/05/12 Redis
sql注入报错之注入原理实例解析
2022/06/10 MySQL