zoukankan      html  css  js  c++  java
  • 手机验证码登录注册--

    前端点击发送验证码---后端生成验证码----后端调用运营商----运营商将验证码发到用户手机---前端输入---后端对比验证
    下载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);
    })
  • 相关阅读:
    详解事件驱动跟消息驱动机制相比
    浏览器加载 CommonJS 模块的原理与实现
    全面理解 javascript 的 argements caller callee call apply 之caller
    在javaScript中检测数据类型的几种方式
    Netbeans IDE 安装Emmet插件并解决Emmet插件无效果问题
    JS的 try catch使用心得
    safari 浏览器 input textarea select 等不能响应用户输入
    js十大排序算法
    js实现 页面加载 完成 后顺序 执行
    原生JS封装 toast 弹层,自动关闭
  • 原文地址:https://www.cnblogs.com/fdxjava/p/12271511.html
Copyright © 2011-2022 走看看