vue+axios 拦截器实现统一token的案例


Posted in Javascript onSeptember 11, 2020

需求

要想统一处理所有http请求和响应,就得用上 axios 的拦截器。通过配置 http response inteceptor ,当后端接口返回 401 Unauthorized(未授权) ,让用户重新登录。

通过这个项目学习如何实现一个前端项目中所需要的 登录及拦截、登出、token失效的拦截及对应 axios 拦截器的使用。

代码如下:

const instance = axios.create({
 baseURL: 'http://www.laravel5.5.com/api/',
 timeout: 10000,
});

//POST传参序列化(添加请求拦截器)
// 在发送请求之前做某件事
instance.interceptors.request.use(config => {
//  // 设置以 form 表单的形式提交参数,如果以 JSON 的形式提交表单,可忽略
 if(config.method === 'post'){
  // JSON 转换为 FormData
  const formData = new FormData();
  Object.keys(config.data).forEach(key => formData.append(key, config.data[key]))
  config.data = formData
 }
 // 下面会说在什么时候存储 token
 if (localStorage.token) {
  config.headers['Authorization'] = localStorage.token;
  config.headers['Accept'] = 'application/json';
  // config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
  // store.dispatch('logined', localStorage.token)
 }
 return config
},error =>{
 alert("错误的传参", 'fail')
 return Promise.reject(error)
})

// 自定义的 axios 响应拦截器
instance.interceptors.response.use((response) => {
 // 判断一下响应中是否有 token,如果有就直接使用此 token 替换掉本地的 token。你可以根据你的业务需求自己编写更新 token 的逻辑
 var token = response.headers.authorization;

 if (token) {
  // 如果 header 中存在 token,那么触发 refreshToken 方法,替换本地的 token
  axios.defaults.headers.common['Authorization'] = token;
 }
 return response
}, (error) => {
 if (error.response) {
  switch (error.response.status) {
   case 401:
    // 这里写清除token的代码
    router.replace({
     path: 'login',
     query: {redirect: router.currentRoute.fullPath}//登录成功后跳入浏览的当前页面
    })
  }
 }
 return Promise.reject(error)
});
Vue.http = Vue.prototype.$http = instance;

简单的分享一下自己的代码;这是本人结合JWT-Auth定制的axios拦截,

1.根据用户是否登陆,查看用户请求头是否携带token

2.根据判断后台响应值headers是否携带Authorization值,如果存在,刷新Token

3.如果用户授权失败,直接跳至登陆页面

补充知识:vue封装axios(统一添加请求参数,如token useId等)

main.js中:

import axios from 'axios'
import VueAxios from 'vue-axios'
import qs from 'qs';
Vue.prototype.$qs = qs;
 
//请求的拦截器
/*axios.defaults.transformRequest=[function(data){
 return qs.stringify(data);
}];*/
axios.interceptors.request.use(function(config){
 const cl_u_id=localStorage.getItem('cl_u_id');
 const appId=localStorage.getItem('appId');
 
 if(config.headers['Content-Type'] == 'multipart/form-data'){
  config.data.set('cl_u_id',cl_u_id);
  config.data.set('appId',appId);
  return config;
 }
 //判断请求的类型:如果是post请求就把默认参数拼到data里面;如果是get请求就拼到params里面
 if(config.method==='post'){
  config.data=qs.stringify({
   cl_u_id:cl_u_id,
   appId:appId,
   ...config.data
  })
 }else if(config.method==='get'){
  config.params={
   cl_u_id:cl_u_id,
   appId:appId,
   ...config.params
  }
 }
 return config;
},function(error){
 return Promise.reject(error);
}) 
Vue.use(VueAxios, axios)

vue+axios 拦截器实现统一token的案例

以上这篇vue+axios 拦截器实现统一token的案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript replace方法与正则表达式
Feb 19 Javascript
如何在父窗口中得知window.open()出的子窗口关闭事件
Oct 15 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
Jan 09 Javascript
学习JavaScript设计模式之代理模式
Jan 12 Javascript
Bootstrap Table的使用总结
Oct 08 Javascript
解决前端跨域问题方案汇总
Nov 20 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
Jan 10 Javascript
js 判断数据类型的几种方法
Jan 13 Javascript
使用JS和canvas实现gif动图的停止和播放代码
Sep 01 Javascript
微信小程序实现选项卡功能
Jun 19 Javascript
用ES6的class模仿Vue写一个双向绑定的示例代码
Apr 20 Javascript
详解JS转换数值函数Number()、parseInt()、parseFloat()
Aug 24 Javascript
Vue axios获取token临时令牌封装案例
Sep 11 #Javascript
Vue-cli4 配置 element-ui 按需引入操作
Sep 11 #Javascript
vue 子组件和父组件传值的示例
Sep 11 #Javascript
jQuery实现朋友圈查看图片
Sep 11 #jQuery
详解webpack的文件监听实现(热更新)
Sep 11 #Javascript
js代码编写无缝轮播图
Sep 13 #Javascript
vue-cli脚手架的.babelrc文件用法说明
Sep 11 #Javascript
You might like
php通过排列组合实现1到9数字相加都等于20的方法
2015/08/03 PHP
利用PHP访问带有密码的Redis方法示例
2017/02/09 PHP
jquery中常用的SET和GET
2009/01/13 Javascript
JQUERY 实现窗口滚动搜索框停靠效果(类似滚动停靠)
2013/03/27 Javascript
js和jquery中循环的退出和继续下一个循环
2014/09/03 Javascript
JavaScript错误处理
2015/02/03 Javascript
jQuery中animate用法实例分析
2015/03/09 Javascript
举例详解Python中smtplib模块处理电子邮件的使用
2015/06/24 Javascript
javascript文本模板用法实例
2015/07/31 Javascript
深入解析JavaScript框架Backbone.js中的事件机制
2016/02/14 Javascript
利用jquery实现瀑布流3种案例
2016/09/18 Javascript
js匿名函数使用&传参(实例)
2017/09/08 Javascript
vue项目中用cdn优化的方法
2018/01/03 Javascript
详解vue的diff算法原理
2018/05/20 Javascript
vue使用ElementUI时导航栏默认展开功能的实现
2018/07/04 Javascript
如何在vue中使用jointjs过程解析
2020/05/29 Javascript
解决Vue router-link绑定事件不生效的问题
2020/07/22 Javascript
JavaScript快速调试的两个技巧
2020/11/04 Javascript
vue 在服务器端直接修改请求的接口地址
2020/12/19 Vue.js
[49:54]Ti4 循环赛第三日 LGD vs Titan
2014/07/12 DOTA
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
深入理解Python中的内置常量
2017/05/20 Python
详解flask表单提交的两种方式
2018/07/21 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
Django框架 查询Extra功能实现解析
2019/09/04 Python
在印度上传处方,在线订购药品:Medlife
2019/03/28 全球购物
这76道Java面试题及答案,祝你能成功通过面试
2016/04/16 面试题
园长自我鉴定
2013/10/06 职场文书
安全责任书范本
2014/04/15 职场文书
环境日宣传活动总结
2014/07/09 职场文书
代理人委托书
2014/08/01 职场文书
小学生毕业评语
2014/12/26 职场文书
党支部季度考核意见
2015/06/02 职场文书
银行中层干部培训心得体会
2016/01/11 职场文书
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏
SpringBoot 集成短信和邮件 以阿里云短信服务为例
2022/04/22 Java/Android