美文网首页我的VUE项目笔记
VUE中的接口摘要认证sign以及api请求公用同一js方法

VUE中的接口摘要认证sign以及api请求公用同一js方法

作者: 勤能补拙的笨小孩 | 来源:发表于2019-08-06 11:30 被阅读0次

摘要认证是什么

是一种由协议规定的Web服务器用来与网页认证信息协商的方法。它在数据发出前,先对其应用哈希函数,这相对更安全。下面记录一下我在项目中计算摘要认证的方法,在这里我使用了一个公用的api.js文件来写所有的接口请求

1、在根目录下新建api/index.js文件

2、在api/index.js文件中引入MD5axios

import Axios from 'axios'

import md5 from 'js-md5';

3、写摘要认证函数

/***摘要认证***/

this.$url = function (cdUrl, datas) {

  const dataArry = []        //定义空数组

  var sign = ''                    //初始化sign

  var json = {}                    //定义空的json,用来存储数据值

  var strs = cdUrl.split('?')[1].split('&');            //将请求url中的head中的参数分割为数组

  if(datas){                        //如果是post数据,也就是说数据存在body里

    var datas = datas.split('&') ;

    strs = strs.concat(datas);        // 拿到它的数据,拼接到strs中

  }                                        //至此拿到get或post请求中的所有数据

  for (var i = 0; i < strs.length; i++) {    

    json[strs[i].split('=')[0]] = strs[i].split('=')[1];

  }    //遍历,将下标为数字的数组数据改为键值属性一一对应的json对象

  var strJson=Object.assign({},json);    //将数值传给strJson

    const keys = Object.keys(strJson).sort();    //将拿到的属性名进行排序

    for (let ki in keys) {    //根据属性名排序,将属性值串起来

        sign += strJson[keys[ki]];

    }

//此处是个人项目需要,没有token的话要拼一个空的 

  if(strJson.token == undefined){ strJson.token = "" }

    //sign加密赋值,根据token是否为空,拼接token

    if(strJson.token == ""){

        cdUrl =  cdUrl + '&sign=' + md5(sign)+'&token='+strJson.token

    }else{

        cdUrl =  cdUrl + '&sign=' + md5(sign)

    }

    return(cdUrl)

}

4、在axios请求中如何使用写好的摘要认证sign

接口公用域名:

const baseURL = 'api/'

Axios.defaults.baseURL = baseURL;

get:

export const getLessonInfo = (params) => {

    return Axios

    .get(this.$url("/?r=Mobile/Details_Courses/Assemble&setId="+params.setId ),{headers:{'version':'1.0.0'}})     

                           //            接口地址                                &      接口请求参数                版本号

    .then( res => res.data.data )}

post:

export const getLessonInfo = params => {

return Axios

                       //                  接口地址                     post参数 post参数

.post(this.$url("/?r=Mobile/Operation_Orders/Info",params), params ,

  {headers:{'version':'1.0.0','Content-Type':'application/x-www-form-urlencoded'}}) 

  //此处的 Content-Type是为了解决post 请求的问题,详见:post 请求的问题

.then( res => res.data )

}

//此处$url中包裹的post参数为配合摘要认证需求,写在此处,包裹外的post参数为axios语法中post参数的位置

5、然后在需要这些接口参数的页面当中,调取api公用文件,调用接口请求函数

//页面中引入api/index.js中的函数,每引入一个,就要在下面的 { }中写入该函数名

import { getLessonInfo } from '@/api'

//获取课程信息

    getLesson() {

      var params={        //请求参数

          setId: this.setId

      }

      getLessonInfo(params).then(res => {

          this.course = res;        //就能够拿到接口返回的参数了

    },

6、摘要认证完毕~!

相关文章

网友评论

    本文标题:VUE中的接口摘要认证sign以及api请求公用同一js方法

    本文链接:https://www.haomeiwen.com/subject/vqhidctx.html