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 相关文章推荐
javascript 当前日期转化为中文的实现代码
May 13 Javascript
javascript Event对象详解及使用示例
Nov 22 Javascript
js中opener与parent的区别详细解析
Jan 14 Javascript
jquery实现从数组移除指定的值
Jun 24 Javascript
jquery动态切换背景图片的简单实现方法
May 14 Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
May 19 Javascript
jQuery自制提示框tooltip改进版
Aug 01 Javascript
JavaScript异步上传图片文件的实例代码
Jul 04 Javascript
详解plotly.js 绘图库入门使用教程
Feb 23 Javascript
JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
Feb 21 Javascript
Element-UI 使用el-row 分栏布局的教程
Oct 26 Javascript
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
Apr 24 Vue.js
浅析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
海贼王:最美的悬赏令!
2020/03/02 日漫
一个典型的PHP分页实例代码分享
2011/07/28 PHP
document.all还是document.getElementsByName?
2006/07/21 Javascript
原生javascript获取元素样式属性值的方法
2010/12/25 Javascript
javascript时区函数介绍
2012/09/14 Javascript
js给页面加style无效果的解决方法
2014/01/20 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
2015/11/24 Javascript
javascript简单判断输入内容是否合法的方法
2016/05/11 Javascript
jquery submit()不能提交表单的解决方法
2017/04/24 jQuery
Node.js Express安装与使用教程
2018/05/11 Javascript
详解vue使用vue-layer-mobile组件实现toast,loading效果
2018/08/31 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
2019/10/15 Javascript
微信小程序实现左侧滑动导航栏
2020/04/08 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
2019/11/07 Javascript
ES2020 新特性(种草)
2020/01/12 Javascript
jQuery实现高度灵活的表单验证功能示例【无UI】
2020/04/30 jQuery
如何使用RoughViz可视化Vue.js中的草绘图表
2021/01/30 Vue.js
python集合类型用法分析
2015/04/08 Python
python使用socket连接远程服务器的方法
2015/04/29 Python
python实现网站的模拟登录
2016/01/04 Python
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
2016/12/14 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
numpy创建单位矩阵和对角矩阵的实例
2019/11/29 Python
python重要函数eval多种用法解析
2020/01/14 Python
Python基于Socket实现简单聊天室
2020/02/17 Python
Pandas中DataFrame基本函数整理(小结)
2020/07/20 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
2020/10/14 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
2021/01/07 Python
使用Python+Appuim 清理微信的方法
2021/01/26 Python
德国高品质男装及配饰商城:Cultizm(Raw Denim原色牛仔裤)
2018/04/16 全球购物
"引用"与指针的区别是什么
2016/09/07 面试题
庆中秋节主题活动方案
2014/02/03 职场文书
安卓程序员求职信
2014/02/28 职场文书
教师“一帮一”结对子活动总结
2015/05/07 职场文书
SQL SERVER实现连接与合并查询
2022/02/24 SQL Server