用户登录短信验证码的实现

目前比较流行的登录方式就是短信验证码登录,但是这种方式是需要借助第三方短信提供商(即为付费的官方接口),其实现流程如下:

在这里插入图片描述
具体实现如下 :

//使用前需要先下载包
let md5 = require('blueimp-md5');
let moment = require('moment');
let Base64 = require('js-base64').Base64;
let request = require('request');

/*生成指定长度的随机数*/
function randomCode(length) {
    let chars = ['0','1','2','3','4','5','6','7','8','9'];
    let result = ""; 
    for(let i = 0; i < length ; i ++) {
        let index = Math.ceil(Math.random()*9);
        result += chars[index];
    }
    return result;
}
exports.randomCode = randomCode;

/*向指定号码发送指定验证码*/
function sendCode(phone, code, callback) {
    let ACCOUNT_SID = '8aaf070855b647ab0155b9f80994058a';
    let AUTH_TOKEN = 'aa8aa679414e49df8908ea5b3d043c24';
    let Rest_URL = 'https://app.cloopen.com:8883';
    let AppID = '8aaf070855b647ab0155b9f809f90590';
    //1. 准备请求url
    /*
     1.使用MD5加密(账户Id + 账户授权令牌 + 时间戳)。其中账户Id和账户授权令牌根据url的验证级别对应主账户。
     时间戳是当前系统时间,格式"yyyyMMddHHmmss"。时间戳有效时间为24小时,如:20140416142030
     2.SigParameter参数需要大写,如不能写成sig=abcdefg而应该写成sig=ABCDEFG
     */
    let sigParameter = '';
    let time = moment().format('YYYYMMDDHHmmss');
    sigParameter = md5(ACCOUNT_SID+AUTH_TOKEN+time);
    let url = Rest_URL+'/2013-12-26/Accounts/'+ACCOUNT_SID+'/SMS/TemplateSMS?sig='+sigParameter;

    //2. 准备请求体
    let body = {
        to : phone,
        appId : AppID,
        templateId : '1',
        "datas":[code,"1"]
    }

    //3. 准备请求头
    /*
     a.使用Base64编码(账户Id + 冒号 + 时间戳)其中账户Id根据url的验证级别对应主账户
     b.冒号为英文冒号
     c.时间戳是当前系统时间,格式"yyyyMMddHHmmss",需与SigParameter中时间戳相同。
     */
    let authorization = ACCOUNT_SID + ':' + time;
    authorization = Base64.encode(authorization);
    let headers = {
        'Accept' :'application/json',
        'Content-Type' :'application/json;charset=utf-8',
        'Content-Length': JSON.stringify(body).length+'',
        'Authorization' : authorization
    }

    //4. 发送请求, 并得到返回的结果, 调用callback
    request({
        method : 'POST',
        url : url,
        headers : headers,
        body : body,
        json : true
    }, function (error, response, body) {
        console.log(error, response, body);
        callback(body.statusCode==='000000');
    });
}
exports.sendCode = sendCode;

/*
//使用方式:
sendCode('18912989092', randomCode(6), function (success) {
    console.log(success);
})
*/

/*
	注意:必须是短信提供商提供的标准的,即第三方付过费用的官方接口,才可使用。
*/

发布了106 篇原创文章 · 获赞 46 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/zlq_CSDN/article/details/93333473