Vue中登录验证成功后保存token,并每次请求携带并验证token操作


Posted in Javascript onSeptember 08, 2020

在vue中,可以用**Storage(sessionStorage,localStorage)**来存储token,也可以用vuex来存储(但要考虑页面刷新数据消失问题,可以在vuex用Storage),

下面介绍用localStorage来存储:

在登录请求成功后,会返回一个token值,用loaclStorage保存

localStorage.setItem('token',res.data.token)

在main.js中设置全局请求头和响应回来的判断

//设置axios请求头加入token
Axios.interceptors.request.use(config => { 
 if (config.push === '/') { 
  } else { 
   if (localStorage.getItem('token')) { 
     //在请求头加入token,名字要和后端接收请求头的token名字一样 
     config.headers.token=localStorage.getItem('token');  
   } 
  } 
   return config; 
 }, 
 error => { 
  return Promise.reject(error);
 });

//=============================
//响应回来token是否过期
Axios.interceptors.response.use(response => { 
  console.log('响应回来:'+response.data.code) 
  //和后端token失效返回码约定403 
  if (response.data.code == 403) {
    // 引用elementui message提示框  
    ElementUI.Message({  
     message: '身份已失效', 
     type: 'err'  
     });
    //清除token 
    localStorage.removeItem('token ');
    //跳转  
    router.push({name: 'login'}); 
   } else { 
     return response 
   } 
  }, 
 error => { 
  return Promise.reject(error); 
  })

在router中的index设置全局守卫来判断是否存在token,不存在就返回登录页

router.beforeEach((to, from, next) => {
//to到哪儿 from从哪儿离开 next跳转 为空就是放行 
 if (to.path === '/') {
 //如果跳转为登录,就放行 
 next(); 
 } else {
 //取出localStorage判断
  let token = localStorage.getItem('token ');   
  if (token == null || token === '') { 
    console.log('请先登录')  
    next({name: 'login'});
   } else {
     next(); 
   } 
}});

补充知识:Vue获取并存储服务器返回的AuthorizationToken信息并给每次请求添加上token

由于后台是用jwt的token进行身份权限验证,后台在登录后把token添加响应头里,所以前台需要把这个token存放起来,并给每次请求的请求头添加上token,服务器才能获取token进行身份认证。

前台使用vue项目:

loging.vue(登录组件)

{
 submitForm(formName) {
 this.$axios
  .post('/api/admin/login', {
  userName: this.ruleForm.userName,
  password: this.ruleForm.password
  })
  .then(successResponse => {
  this.responseResult = JSON.stringify(successResponse.data)
  this.msg = JSON.stringify(successResponse.data.msg)
  if (successResponse.data.code === 200) {
  this.msg='';
  localStorage.setItem('userName',this.ruleForm.userName);
  //获取并存储服务器返回的AuthorizationToken信息
  var authorization=successResponse.headers['authorization'];
  localStorage.setItem('authorization',authorization);
  //登录成功跳转页面
  this.$router.push('/dashboard');
  
  }
  })
  .catch(failResponse => {})
 }
 }

main.js(全局配置js):

//自动给同一个vue项目的所有请求添加请求头
axios.interceptors.request.use(function (config) {
 let token = localStorage.getItem('authorization');
 if (token) {
 config.headers['Authorization'] = token;
 }
 return config;
})

这里还需要考虑token过期失效的问题,博主将会在后续另写博客补充。

以上这篇Vue中登录验证成功后保存token,并每次请求携带并验证token操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js实现文本框中焦点在最后位置
Mar 04 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
May 08 Javascript
js实现温度计时间样式代码分享
Aug 21 Javascript
JavaScript学习笔记之数组去重
Mar 23 Javascript
两行代码轻松搞定JavaScript日期验证
Aug 03 Javascript
80%应聘者都不及格的JS面试题
Mar 21 Javascript
vue中$nextTick的用法讲解
Jan 17 Javascript
Vue 3.0 前瞻Vue Function API新特性体验
Aug 12 Javascript
Vue使用vue-recoure + http-proxy-middleware + vuex配合promise实现基本的跨域请求封装
Oct 21 Javascript
vuejs中父子组件之间通信方法实例详解
Jan 17 Javascript
微信小程序实现身份证取景框拍摄
Sep 09 Javascript
JS使用setInterval计时器实现挑战10秒
Nov 08 Javascript
浅析JavaScript 函数柯里化
Sep 08 #Javascript
Vue.js使用axios动态获取response里的data数据操作
Sep 08 #Javascript
JavaScript 事件代理需要注意的地方
Sep 08 #Javascript
Vue axios 跨域请求无法带上cookie的解决
Sep 08 #Javascript
详解JavaScript的this指向和绑定
Sep 08 #Javascript
vue点击按钮实现简单页面的切换
Sep 08 #Javascript
Vue filter 过滤器、以及在table中的使用介绍
Sep 07 #Javascript
You might like
PHP类的静态(static)方法和静态(static)变量使用介绍
2012/02/19 PHP
PHP数据库操作二:memcache用法分析
2017/08/16 PHP
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
权威JavaScript 中的内存泄露模式
2007/08/13 Javascript
jquery focus(fn),blur(fn)方法实例代码
2011/12/16 Javascript
javascript使用百度地图api和html5特性获取浏览器位置
2014/01/10 Javascript
JS版的date函数(和PHP的date函数一样)
2014/05/12 Javascript
jQuery实现设置、移除文本框默认值功能
2015/01/13 Javascript
jquery简单的弹出层浮动层代码
2015/04/27 Javascript
使用canvas实现仿新浪微博头像截取上传功能
2015/09/02 Javascript
谈谈impress.js初步理解
2015/09/09 Javascript
javascript实现获取指定精度的上传文件的大小简单实例
2016/10/25 Javascript
JavaScript实现简单的四则运算计算器完整实例
2017/04/28 Javascript
彻底解决 webpack 打包文件体积过大问题
2017/07/07 Javascript
判断js数据类型的函数实例详解
2019/05/23 Javascript
使用layui前端框架弹出form表单以及提交的示例
2019/10/25 Javascript
es6函数中的作用域实例分析
2020/04/18 Javascript
JavaScript实现消消乐的源代码
2021/01/12 Javascript
[00:57]辉夜杯战队访谈宣传片—VG
2015/12/25 DOTA
[45:34]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.18
2020/12/19 DOTA
python复制文件的方法实例详解
2015/05/22 Python
Python动刷新抢12306火车票的代码(附源码)
2018/01/24 Python
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
python学生信息管理系统实现代码
2019/12/17 Python
Python namedtuple命名元组实现过程解析
2020/01/08 Python
Python csv文件记录流程代码解析
2020/07/16 Python
python基于exchange函数发送邮件过程详解
2020/11/06 Python
纯HTML+CSS3制作导航菜单(附源码)
2013/04/24 HTML / CSS
美国亚马逊旗下时尚女装网店:SHOPBOP(支持中文)
2020/10/17 全球购物
一道Delphi面试题
2016/10/28 面试题
21岁生日感言
2014/02/27 职场文书
无刑事犯罪记录证明范本
2014/09/29 职场文书
python numpy中setdiff1d的用法说明
2021/04/22 Python
使用CSS设置滚动条样式
2022/01/18 HTML / CSS
muduo TcpServer模块源码分析
2022/04/26 Redis
Windows Server 2012 R2 磁盘分区教程
2022/04/29 Servers