手机验证码登录注册--

前端点击发送验证码---后端生成验证码----后端调用运营商----运营商将验证码发到用户手机---前端输入---后端对比验证
下载tenxun运营商代码
分析:
// 安装md5加密npm i blueimp-md5 --save
// 用户密码也需要这个加密-一般暴力破解需要无限的测试-较安全的是在加上一个反向md5还有盐
var md5 = require('blueimp-md5');
// npm i moment -- save
// 日期处理类
var moment = require('moment');
// npm i js-base64 --save
// 将图片转换为64编码
var Base64 = require('js-base64').Base64;
// npm i request --save
var request = require('request');

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

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

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

//3. 准备请求头
/*
a.使用Base64编码(账户Id + 冒号 + 时间戳)其中账户Id根据url的验证级别对应主账户
b.冒号为英文冒号
c.时间戳是当前系统时间,格式"yyyyMMddHHmmss",需与SigParameter中时间戳相同。
*/
var authorization = ACCOUNT_SID + ':' + time;
authorization = Base64.encode(authorization);
var 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);
})*/

 后端接口

// 引入下载的运营商代码-要用到里边的方法
const sms_util = require('./../util/sms_util');
sendCode('18912989092', randomCode(6), function (success) {
console.log(success);
})
原文地址:https://www.cnblogs.com/fdxjava/p/12271511.html