• 偏前端


     token+按接口参数顺序(参数值拼接base64)-> MD5)

     

    请教于“喵咪”,再此特别鸣谢!~

    特别强调:import qs from qs; 这个内部方法一定要用哦。参数签名+base64+md5都成功的情况华。接口还是爆500,就是和这个有关系啦。

    我也是第一次用vue的axios大家可以多交流哦,加我qq,给我更好的建议吧

     

     

    /*main.js*/

    // The Vue build version to load with the `import` command // (runtime-only or standalone) has been set in webpack.base.conf with an alias. import Vue from 'vue' import App from './App' import router from './router' import $ from 'jquery' import qs from 'qs' //相当于JSON.stringify(),跨域? import axiosServer from './assets/axiosFilter/axiosFilter' import './assets/mui/css/mui.min.css' import mui from './assets/mui/js/mui.min.js' Vue.prototype.mui=mui; Vue.prototype.$qs=qs; Vue.prototype.$http = axiosServer; Vue.config.productionTip = false; /* eslint-disable no-new */ new Vue({ el: '#app', router, components: { App }, template: '<App/>' })

      

    /*axiosFilter.js*/

    import axios from 'axios'; //安装axios import md5 from 'js-md5'; //md5 import mui from '../mui/js/mui.min.js'; //mui插件 import qs from 'qs'; //类似于JSON.stringify(),安装即可。这个一定要用哦!!!!!! let Base64 = require('js-base64').Base64; //base65加密 var orginusrl; //不加域名的,请求api的url const baseUrl = "http://www.xxxx.com/mobile/"; 设置统一请求的api域名前缀 /** * 创建axios实例 */ const axiosServer = axios.create({ tiemout:10000, //超时时间 headers:{ 'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8' } }) /** * 响应拦截器 */ axiosServer.interceptors.response.use( (json) => { //判断sys返回结果 json = json.data; if(json.sys.code == 200 ){ if(json.biz.code == 200){ //登录请求成功后写入token, if(orginusrl == 'user/loginByMobileWithNoImgCode' || orginusrl == 'user/loginWithNoImgCode'){ states.t = json.headers['Authorization']; setState(states); } //然后返回数据 return json.biz; }else if(json.biz.code == 300){ mui.alert(json.biz.message); return ; }else{ mui.alert(json.biz.message); return ; } }else if(json.sys.code == 403){ //请先登录 states.t = ''; setState(states); //跳转到登录页面 这里自己写吧 linkToPage('login'); }else{ mui.alert(json.sys.msg); return; } } ) /** * 请求拦截器 */ axiosServer.interceptors.request.use( (config) => { //设置请求头 var headerstate = localStorage.getItem('$state'); if(headerstate){ config.headers['Authorization'] = JSON.parse(localStorage.getItem('$state')).t; } orginusrl = config.url; config.url = baseUrl+ orginusrl; config.data.signature= paramsToStr(config.data); config.data = qs.stringify(config.data); return config; } ) /** * 储存token */ var setState = (state) => { state = state || {}; localStorage.setItem('$state', JSON.stringify(state)); }; /** * 提取token */ var getState = () => { var state = JSON.parse(localStorage.getItem('$state') || "{}"); state = mui.extend(true, {t: ''}, state); return state; }; /** * 签名函数 */ var signature = (istoken,param) => { var state = getState(); if(param == undefined || param== null){ param = ''; } var str = ''; if(istoken){ str = state.t + Base64.encode(param); }else{ str = Base64.encode(param); } return md5(str); }; /** * 参数处理函数 */ var paramsToStr = (data) =>{ var param = data; var str = '' if(param){ for(var value in param){// if(value != 'istoken'){ str = str + param[value]; } } str = signature(data.istoken,str); return str; } } export default axiosServer;

     

    /*home.vue*/

    /** * 获取首页借款列表 */ that.$http({ method: 'post', url: 'borrow/GetBorrowList', data:{ "page_index": "1", "page_size": "3" } }).then(function(response){ that.borrowItems = response.data; }).catch(function(error){ console.log(error); })

    看看headers

    在看下数据结构  

    https://www.cnblogs.com/Lrn14616/p/10956726.html 欢迎大家在我学习的道路上,给出更好的建议

     

  • 相关阅读:
    element 树形控件使用
    js粘贴图片并显示
    vue-element Tree树形控件通过id默认选中
    解决win10shift+右键显示在此处打开powershell而不是命令窗口的问题
    maven安装与配置
    解决dos窗口中文乱码问题
    vue单页面应用刷新网页后vuex的state数据丢失的解决方案
    vue 单个倒计时组件
    js将秒转换为时分秒
    vue3.0用vue-awesome-swiper
  • 原文地址:https://www.cnblogs.com/Lrn14616/p/10956726.html
Copyright © 2020-2023  润新知