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 相关文章推荐
基于Jquery的实现回车键Enter切换焦点
Sep 14 Javascript
Jquery实现图片放大镜效果的思路及代码(自写)
Oct 18 Javascript
JavaScript中的立即执行函数表达式介绍
Mar 15 Javascript
纯js实现仿QQ邮箱弹出确认框
Apr 29 Javascript
jQuery-mobile事件监听与用法详解
Nov 23 Javascript
JavaScript实现多栏目切换效果
Dec 12 Javascript
EditPlus 正则表达式 实战(3)
Dec 15 Javascript
Vuejs 用$emit与$on来进行兄弟组件之间的数据传输通信
Feb 23 Javascript
Map.vue基于百度地图组件重构笔记分享
Apr 17 Javascript
node使用Koa2搭建web项目的方法
Oct 17 Javascript
一篇文章带你使用Typescript封装一个Vue组件(简单易懂)
Jun 05 Javascript
Vue实现移动端拖拽交换位置
Jul 29 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&mysql(一)
2006/10/09 PHP
php实现简单文件下载的方法
2015/01/30 PHP
php表单处理操作
2017/11/16 PHP
javascript两段代码,两个小技巧
2010/02/04 Javascript
用js控制组织结构图可以任意拖拽到指定位置
2014/01/17 Javascript
js操作模态窗口及父子窗口间相互传值示例
2014/06/09 Javascript
JavaScript中pop()方法的使用教程
2015/06/09 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
CSS3 3D 技术手把手教你玩转
2016/09/02 Javascript
js拖拽功能实现代码解析
2016/11/28 Javascript
JavaScript 字符串常用操作小结(非常实用)
2016/11/30 Javascript
ES6新特性六:promise对象实例详解
2017/04/21 Javascript
js编写选项卡效果
2017/05/23 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
2017/09/18 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
深入浅析Vue全局组件与局部组件的区别
2018/06/15 Javascript
js 实现watch监听数据变化的代码
2019/10/13 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
javascript 内存模型实例详解
2020/04/18 Javascript
vue中移动端调取本地的复制的文本方式
2020/07/18 Javascript
python读取csv文件并把文件放入一个list中的实例讲解
2018/04/27 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
Python实现的远程文件自动打包并下载功能示例
2019/07/12 Python
HTML5之WebGL 3D概述(下)—借助类库开发及框架介绍
2013/01/31 HTML / CSS
耐克美国官网:Nike.com
2016/08/01 全球购物
Woolworth官网:澳洲第一大超市
2017/06/25 全球购物
Pedro官网:新加坡时尚品牌
2019/08/27 全球购物
网络体系结构及协议的定义
2014/03/13 面试题
Java中的类包括什么内容?设计时要注意哪些方面
2012/05/23 面试题
法律进机关实施方案
2014/03/12 职场文书
2014基层党员干部学习全国两会心得体会
2014/03/17 职场文书
艺术设计专业求职自荐信
2014/05/19 职场文书
2015年网络舆情工作总结
2015/07/24 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书
详解Python常用的魔法方法
2021/06/03 Python
整理Python中常用的conda命令操作
2021/06/15 Python