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 相关文章推荐
Firefox+FireBug使JQuery的学习更加轻松愉快
Jan 01 Javascript
javascript instanceof,typeof的区别
Mar 24 Javascript
JavaScript 代码压缩工具小结
Feb 27 Javascript
jquery 动态创建元素的方式介绍及应用
Apr 21 Javascript
Javascript玩转继承(三)
May 08 Javascript
extjs 分页使用jsp传递数据示例
Jul 29 Javascript
AspNet中使用JQuery boxy插件的确认框
May 20 Javascript
javascript多物体运动实现方法分析
Jan 08 Javascript
Vue.js基础学习之class与样式绑定
Mar 20 Javascript
Vue项目总结之webpack常规打包优化方案
Jun 06 Javascript
CKeditor富文本编辑器使用技巧之添加自定义插件的方法
Jun 14 Javascript
javascript+css实现俄罗斯方块小游戏
Jun 28 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代码
2010/08/08 PHP
Yii中CGridView关联表搜索排序方法实例详解
2014/12/03 PHP
Laravel实现自定义错误输出内容的方法
2016/10/10 PHP
php+jQuery实现的三级导航栏下拉菜单显示效果
2017/08/10 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
PHP与Web页面的交互示例详解二
2020/08/04 PHP
js加解密 脚本解密
2008/02/22 Javascript
js获取url参数代码实例分享(JS操作URL)
2013/12/13 Javascript
JavaScript去除数组里重复值的方法
2015/07/13 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
jQuery模拟select实现下拉菜单功能
2016/06/20 Javascript
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
Vue组件创建和传值的方法
2018/08/17 Javascript
Angular6 用户自定义标签开发的实现方法
2019/01/08 Javascript
100行代码实现vue表单校验功能(小白自编)
2019/11/19 Javascript
Python装饰器decorator用法实例
2014/11/10 Python
Python计算程序运行时间的方法
2014/12/13 Python
Django 视图层(view)的使用
2018/11/09 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
Python socket聊天脚本代码实例
2020/01/02 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
2020/01/08 Python
解决Python数据可视化中文部分显示方块问题
2020/05/16 Python
k-means 聚类算法与Python实现代码
2020/06/01 Python
python一些性能分析的技巧
2020/08/30 Python
python自动打开浏览器下载zip并提取内容写入excel
2021/01/04 Python
Python日志打印里logging.getLogger源码分析详解
2021/01/17 Python
Myprotein丹麦官网:欧洲第一运动营养品牌
2019/04/15 全球购物
铁路个人事迹材料
2014/01/30 职场文书
租赁意向书范本
2014/04/01 职场文书
升职演讲稿范文
2014/05/23 职场文书
2014年团支书工作总结
2014/11/14 职场文书
庆元旦主持词
2015/07/06 职场文书
如何用python反转图片,视频
2021/04/24 Python
python基础之文件处理知识总结
2021/05/23 Python
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js
Go语言读取txt文档的操作方法
2022/01/22 Golang