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 个人笔记(没有整理,很乱)
Jul 07 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
Dec 29 Javascript
js实现的简单radio背景颜色选择器代码
Aug 18 Javascript
jQuery+canvas实现的球体平抛及颜色动态变换效果
Jan 28 Javascript
Javascript获取随机数的实现方法
Jun 22 Javascript
JS 拦截全局ajax请求实例解析
Nov 29 Javascript
js实现九宫格的随机颜色跳转
Feb 19 Javascript
JS 组件系列之 bootstrap treegrid 组件封装过程
Apr 28 Javascript
javascript显示动态时间的方法汇总
Jul 06 Javascript
vue项目首屏打开速度慢的解决方法
Mar 31 Javascript
微信小程序 wx:for遍历循环使用实例解析
Sep 09 Javascript
javascript前端和后台进行数据交互方法示例
Aug 07 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中子类重载父类的方法【parent::方法名】
2016/05/06 PHP
PHP数据对象PDO操作技巧小结
2016/09/27 PHP
laravel5.1 ajax post 传值_token示例
2019/10/24 PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
2019/12/03 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2020/01/22 PHP
Js callBack 返回前一页的js方法
2008/11/30 Javascript
jquery $.getJSON()跨域请求
2011/12/21 Javascript
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
2012/04/12 Javascript
jquery获取css中的选择器(实例讲解)
2013/12/02 Javascript
js检测网络是否具体连接功能的代码
2014/05/23 Javascript
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
2014/12/20 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
2015/07/28 Javascript
js实现带有介绍的Select列表菜单实例
2015/08/18 Javascript
手机端转盘抽奖代码分享
2015/09/10 Javascript
JavaScript前端开发之实现二进制读写操作
2015/11/04 Javascript
EasyUi中的Combogrid 实现分页和动态搜索远程数据
2016/04/01 Javascript
在vue-cli脚手架中配置一个vue-router前端路由
2017/07/03 Javascript
vuex2中使用mapGetters/mapActions报错的解决方法
2018/10/20 Javascript
原生JS检测CSS3动画是否结束的方法详解
2019/01/27 Javascript
微信二次分享报错invalid signature问题及解决方法
2019/04/01 Javascript
使用vue脚手架(vue-cli)搭建一个项目详解
2019/05/09 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
2020/10/02 Javascript
[08:53]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS 选手采访
2021/03/11 DOTA
用Python编程实现语音控制电脑
2014/04/01 Python
Python线程指南详细介绍
2017/01/05 Python
python实现矩阵打印
2019/03/02 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
竞争上岗演讲稿
2014/01/05 职场文书
《囚绿记》教学反思
2014/03/01 职场文书
奉献演讲稿范文
2014/05/21 职场文书
施工质量承诺书范文
2014/05/30 职场文书
小学教师培训方案
2014/06/09 职场文书
三国演义读书笔记
2015/06/25 职场文书
golang 实现菜单树的生成方式
2021/04/28 Golang
关于的python五子棋的算法
2022/05/02 Python