Vue登陆鉴权方案(token)

Vue token 登陆鉴权完整方案-----总结
一、路由拦截
目的:页面跳转时验证,确认是否即将进入的页面需要登陆验证。 router/index.js

//给需要验证的页面添加 meta : {  requireAuth :true } 如下:
export default new Router({scrollBehavior (to, from, savedPosition) {          return { x: 0, y: 0 }}, routes: [{path: '*',redirect: '404'},{path: '',redirect: 'login'},{path:'/404',name:'NotFound',component:NotFound},{path:'/login',name:'Login',component:Login,meta : {requireAuth :false}},{path:'/main',name:'Main',component:Main,meta : { requireAuth :true },children:[{path:'/home',name:'Home',component: Home,meta : {  requireAuth :true }}]}]}]
})

main.js

router.beforeEach((to, from, next) => {if(to.meta.requireAuth) {    //如果下一个页面的requireAuth是true,则验证token是否存在if(sessionStorage.getItem("user_token")){next()}else{next({path: '/login',query: {redirect: to.fullPath}})	}}else{next()}
})

二、axios通信验证
目的:浏览器发送请求时,验证是否有token,是否需要登陆获取token;接收请求时,拦截,如果token过期则重新登陆。

发送拦截

axios.interceptors.request.use(config => {if (sessionStorage.getItem("user_token")) {  // 判断是否存在token,如果存在的话,则每个http header都加上tokenconfig.headers.Authorization = 'Bearer '+ sessionStorage.getItem("user_token")}return config},err => {return Promise.reject(err)
})

响应拦截

axios.interceptors.response.use(response => {return response},error => { //默认除了2XX之外的都是错误的,就会走这里if(error.response){alert(12313)switch(error.response.status){case 401:Message.error({message: 'Token失效,请重新登陆'})sessionStorage.removeItem('user_token') //可能是token过期,清除它router.replace({ //跳转到登录页面path: '/Login',query: { redirect: router.currentRoute.fullPath } // 将跳转的路由path作为参数,登录成功后跳转到该路由})break;case 404:router.replace({ //跳转到登录页面path: '/404'})break;case 500:ElementUI.Message.error({message: '服务器错误'})break;}}else{router.replace({ //跳转到登录页面path: '/404'})}return Promise.reject(error.response)
})

三.登陆获取token


onSubmitByAccount() {if(this.accountForm.name=='' || this.accountForm.password == ''){this.accountForm.errorMsg="用户名或密码不得为空"}else{this.$http.post('tokens',{username:this.accountForm.name,password:this.accountForm.password}).then(response=>{sessionStorage.setItem("user_token",response.data) //保存tokenif(this.$route.query.redirect){ let path = this.$route.query.redirectthis.$router.push({ path: path })}else{this.$router.push({name:'Home'})}}).catch(error=>{this.accountForm.errorMsg="登陆失败!"}) //this.isAccountLoading =true;	}return false;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/791118.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot和Vue的金融融资管理系统的设计和实现【附源码】

1、系统演示视频(演示视频) 2、需要交流和学习请联系

vue弹出的添加信息组件中 el-radio 单选框无法点击问题

情景描述:在弹出的添加信息的组件中的form中有一个单选框,单选框无法进行点击切换 原因如下: 单选框要求有个默认值,因为添加和更新操作复用同一个组件,所以我在初始化时对相关进行了判定,如果为空则赋初始值 结果这样虽然实现了初始值的展示,但是就是如此造成了单选框的无法切…

Java Web面试题(四)

1. JDBJDBC的DriverManager主要用于管理一组JDBC驱动程序。其主要职责包括: JDBC的DriverManager主要用于管理一组JDBC驱动程序。其主要职责包括: 注册数据库驱动程序:在使用JDBC连接数据库之前,必须先注册适用于数据库的驱动程…

代码随想录算法训练营第二十九天(回溯5)|491. 非递减子序列、46. 全排列、47. 全排列 II(JAVA)

文章目录 491. 非递减子序列解题思路源码 46. 全排列解题思路源码 47. 全排列 II解题思路源码 总结 491. 非递减子序列 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 …

Java基础学习: Forest - 极简 HTTP 调用 API 框架

文章目录 一、介绍参考: 一、介绍 Forest是一个开源的Java HTTP客户端框架,专注于简化HTTP客户端的访问。它是一个高层的、极简的轻量级HTTP调用API框架,通过Java接口和注解的方式,将复杂的HTTP请求细节隐藏起来,使HT…

前端返回 List<Map<String, Object>>中的vaue值里面包含一个Bigdecimal类型,序列化时小数点丢失,如何解决?

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

golang channel实践代码及注意事项

在使用Go语言(Golang)的通道(Channel)时,有几个重要的注意点可以帮助开发者更安全、高效地使用它们进行并发编程。以下是一些关键的注意事项: 选择正确的通道类型:Go语言提供了两种类型的通道&…

Linux 命令 top 详解

1 top命令介绍 Linux系统中,Top命令主要用于实时运行系统的监控,包括Linux内核管理的进程或者线程的资源占用情况。这个命令对所有正在运行的进程和系统负荷提供不断更新的概览信息,包括系统负载、CPU利用分布情况、内存使用、每个进程的内容…

PS从入门到精通视频各类教程整理全集,包含素材、作业等(7)

PS从入门到精通视频各类教程整理全集,包含素材、作业等 最新PS以及插件合集,可在我以往文章中找到 由于阿里云盘有分享次受限制和文件大小限制,今天先分享到这里,后续持续更新 PS敬伟01——90集等文件 https://www.alipan.com/s…

Golang | Leetcode Golang题解之第7题整数反转

题目&#xff1a; 题解&#xff1a; func reverse(x int) (rev int) {for x ! 0 {if rev < math.MinInt32/10 || rev > math.MaxInt32/10 {return 0}digit : x % 10x / 10rev rev*10 digit}return }

ETL工具-nifi干货系列 第八讲 处理器PutDatabaseRecord 写数据库(详细)

1、本节通过一个小例子来讲解下处理器PutDatabaseRecord&#xff0c;该处理器的作用是将数据写入数据库。 如下流程通过处理器GenerateFlowFile 生成数据&#xff0c;然后通过处理器JoltTransformJSON转换结构&#xff0c;最后通过处理器PutDatabaseRecord将数据写入数据库。如…

keepalived+LVS高可用部署

目录 一.两台设备&#xff08;2.130和2.133&#xff09;作为调度器&#xff0c;前主后备 1.部署keepalived 2.修改配置文件准备启动 3.配置keepalived的系统日志并启动 二.模拟调度器掉点和web服务进程丢失 1.调度器掉点 2.当类似于httpd这种网站服务掉点 三.以三种健康…

C++ 前K个高频单词的六种解法

目录 大堆 小堆 vectorsort vectorstable_sort multimap set/multiset 与GPT的对话 1.对于比较类型中 < 运算符重载的理解 2.map有稳定性的说法吗 ​编辑 3.为什么map和set类的仿函数后面要加const来修饰*this 5.关于名词的理解 6.匿名对象对类要求 7.map和set的…

Python 三元条件运算符

Python 中有三元条件运算符&#xff0c;这个功能在Python 2.5版本中被添加。三元条件运算符允许在单行内根据条件表达式的真假来选择两个表达式中的一个。其基本语法如下&#xff1a; python a if condition else b这里&#xff0c;condition 是一个布尔表达式&#xff0c;如果…

新手使用GIT上传本地项目到Github(个人笔记)

亲测下面的文章很有用处。 1. 初次使用git上传代码到github远程仓库 - 知乎 (zhihu.com) 2. 使用Git时出现refusing to merge unrelated histories的解决办法 - 知乎

Linux下I2C驱动实验: I2C驱动框架与I2C总线驱动

一. 简介 现在&#xff0c;我们来学习一下如何在 Linux 下开发 I2C 接口器件 驱动&#xff0c;重点是学习 Linux 下的 I2C 驱动框架&#xff0c;按照指定的框架去编写 I2C 设备驱动。 本文来了解以下 Linux下 I2C 驱动框架&#xff0c;框架下的 i2C总线驱动&#x…

【大数据存储】实验五:Mapreduce

实验Mapreduce实例——排序&#xff08;补充程序&#xff09; 实验环境 Linux Ubuntu 16.04 jdk-8u191-linux-x64 hadoop-3.0.0 hadoop-eclipse-plugin-2.7.3.jar eclipse-java-juno-SR2-linux-gtk-x86_64 实验内容 在电商网站上&#xff0c;当我们进入某电商页面里浏览…

windows@软件显示模糊@屏幕显示器分辨率和精细度

文章目录 refsDPIPPIPPI (Pixels Per Inch)DPI (Dots Per Inch) 屏幕尺寸数windows中DPI设置对单个应用设置DPI兼容性设置使用系统全局设置 获取屏幕(监视器)信息&#x1f47a;获取监视器的型号pnp 监视器windows 获取屏幕分辨率 高分辨率屏幕高分辨率和高精细度屏幕&#x1f4…

RedHat9中KVM虚拟机的配置与管理

KVM虚拟技术介绍 Linux的KVM&#xff08;Kernel-based Virtual Machine&#xff09;虚拟技术是一种基于Linux内核的虚拟化解决方案。它允许在单个物理服务器上创建和运行多个隔离的虚拟机&#xff0c;每个虚拟机都有自己的操作系统和应用程序&#xff0c;就像运行在独立的物理…

MyBatis入门到掌握(JAVA)

建立连接可能涉及到的问题&#xff08;只需要自己改一下就行&#xff09; 1、MyBatis是⼀款优秀的 持久层 框架&#xff0c;⽤于简化JDBC的开发 2、数据库连接配置 &#xff08;1&#xff09;yml配置 # 数据库连接配置 spring:datasource:url: jdbc:mysql://127.0.0.1:3306/…