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 相关文章推荐
jquery 操作DOM的基本用法分享
Apr 05 Javascript
js禁止回车提交表单的示例代码
Dec 23 Javascript
js判断ie版本号的简单实现代码
Mar 05 Javascript
三种方式获取XMLHttpRequest对象
Apr 21 Javascript
jQuery简易图片放大特效示例代码
Jun 09 Javascript
详解AngularJS如何实现跨域请求
Aug 22 Javascript
AngularJS服务service用法总结
Dec 13 Javascript
JS实现汉字与Unicode码相互转换的方法详解
Apr 28 Javascript
jquery与js实现全选功能的区别
Jun 11 jQuery
微信小程序实现自定义加载图标功能
Jul 19 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
Jan 24 Javascript
vue从零实现一个消息通知组件的方法详解
Mar 16 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中数组的分组排序实例
2014/06/01 PHP
PHP与SQL语句写一句话木马总结
2019/10/11 PHP
发布一个基于javascript的动画类 Fx.js
2010/11/05 Javascript
jQuery源码分析-02正则表达式 RegExp 常用正则表达式
2011/11/14 Javascript
JS判断对象是否存在的10种方法总结
2013/12/23 Javascript
jQuery is()函数用法3例
2014/05/06 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
Bootstrap每天必学之响应式导航、轮播图
2016/04/25 Javascript
jquery 中toggle的2种用法详解(推荐)
2016/09/02 Javascript
jQuery插件DataTable使用方法详解(.Net平台)
2016/12/22 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
2017/01/01 Javascript
微信小程序wx.getImageInfo()如何获取图片信息
2018/01/26 Javascript
详解基于Node.js的HTTP/2 Server实践
2018/05/31 Javascript
vue动态路由:路由参数改变,视图不更新问题的解决
2019/11/05 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
微信小程序实现搜索功能
2020/03/10 Javascript
Python常用的日期时间处理方法示例
2015/02/08 Python
python中用logging实现日志滚动和过期日志删除功能
2019/08/20 Python
Python threading的使用方法解析
2019/08/28 Python
django实现web接口 python3模拟Post请求方式
2019/11/19 Python
python字符串常用方法及文件简单读写的操作方法
2020/03/04 Python
python中元组的用法整理
2020/06/15 Python
浅谈Selenium 控制浏览器的常用方法
2020/12/04 Python
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021/03/17 Javascript
HTML5 weui使用笔记
2019/11/21 HTML / CSS
方太官方网上商城:销售方太抽油烟机、燃气灶、消毒柜等
2017/01/17 全球购物
生产主管岗位职责
2013/11/10 职场文书
法制宣传教育方案
2014/05/09 职场文书
管理工程专业求职信
2014/08/10 职场文书
党员批评与自我批评(5篇)
2014/09/23 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
2015年“世界无车日”活动方案
2015/05/06 职场文书
2015年路政工作总结
2015/05/22 职场文书
只用40行Python代码就能写出pdf转word小工具
2021/05/31 Python
总结几个非常实用的Python库
2021/06/26 Python