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中defineProperty和Proxy的区别详解
Nov 30 Vue.js
Vue实现手机号、验证码登录(60s禁用倒计时)
Dec 19 Vue.js
浅析vue中的nextTick
Dec 28 Vue.js
vue.js watch经常失效的场景与解决方案
Jan 07 Vue.js
vscode自定义vue模板的实现
Jan 27 Vue.js
vue3.0中使用element的完整步骤
Mar 04 Vue.js
Vue详细的入门笔记
May 10 Vue.js
vue实现可拖拽的dialog弹框
May 13 Vue.js
Vue3.0写自定义指令的简单步骤记录
Jun 27 Vue.js
Vue3.0中Ref与Reactive的区别示例详析
Jul 07 Vue.js
Vue+Flask实现图片传输功能
Apr 01 Vue.js
vue使用element-ui按需引入
May 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 5.0对象模型深度探索之属性和方法
2008/03/27 PHP
解决MySQL中文输出变成问号的问题
2008/06/05 PHP
php线性表的入栈与出栈实例分析
2015/06/12 PHP
PHP7+Nginx的配置与安装教程详解
2016/05/10 PHP
浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)
2013/07/09 Javascript
jquery parent和parents的区别分析
2013/10/02 Javascript
基于JS实现简单的样式切换效果代码
2015/09/04 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
2015/09/09 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
深入浅析JavaScript中的作用域和上下文
2016/03/26 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
jquery 多个radio的click事件实例
2016/12/03 Javascript
Angular使用cli生成自定义文件、组件的方法
2018/09/04 Javascript
webpack4.0 入门实践教程
2018/10/08 Javascript
快速搭建Node.js(Express)用户注册、登录以及授权的方法
2019/05/09 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
2019/12/18 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
django使用haystack调用Elasticsearch实现索引搜索
2019/07/24 Python
python解析命令行参数的三种方法详解
2019/11/29 Python
解决TensorFlow GPU版出现OOM错误的问题
2020/02/03 Python
Django模板获取field的verbose_name实例
2020/05/19 Python
Python使用正则表达式实现爬虫数据抽取
2020/08/17 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
芬兰灯具网上商店:Nettilamppu.fi
2018/06/30 全球购物
德国户外商店:eXXpozed
2020/07/25 全球购物
启动一个线程是用run()还是start()
2016/12/25 面试题
这76道Java面试题及答案,祝你能成功通过面试
2016/04/16 面试题
培训楼经理岗位责任制
2014/02/10 职场文书
银行反四风对照检查材料
2014/09/29 职场文书
部队2014年终工作总结
2014/11/27 职场文书
初中作文评语集锦
2014/12/25 职场文书
优秀员工自荐书
2015/03/06 职场文书
聘任合同书
2015/09/21 职场文书
《圆的面积》教学反思
2016/02/19 职场文书
纯html+css实现奥运五环的示例代码
2021/08/02 HTML / CSS
Mysql多层子查询示例代码(收藏夹案例)
2022/03/31 MySQL