通过sails和阿里大于实现短信验证


Posted in Javascript onJanuary 04, 2017

通过sails与阿里大于来实现注册短信验证码的发送,逻辑图如下

通过sails和阿里大于实现短信验证

1、用户在客户端发送手机号给服务器,服务器接收到手机号,生成对应时间戳,随机四位数验证码

2、服务器将电话号码和验证码告诉阿里大于服务器,阿里大于服务器将验证码发送到对应手机

3、服务器将接受到的手机号,时间戳,验证码,与服务器秘钥(为了增加秘钥破解难度,提高安全)通过md5加密生成token,并且将token与时间戳发送到前端

4、前端接收到短信,输入验证码后,再把验证码,手机号,接收到的token1和时间戳发送到服务器进行验证

5、用接收到的时间戳与服务器时间进行对比,超过时间及返回超时,需要客户端重新验证

6、没有超时遍开始核对,把第二次从客户端接收到的验证码,手机号,时间戳与服务器秘钥生成token2,如果token2与接收到的token1相同,则进行注册,如果不同则返回验证码错误

Sails代码:

service文件

需要npm install alidayujs --save

//services/SmsService.js
 var Alidayu = require('alidayujs');
 module.exports = {
   sendSms: function(options, done) {
     //应用密匙 见:http://www.alidayu.com/help?spm=a3142.7802526.1.24.iEB4Yc&_t=1#create
     var config = {
       app_key: '你的key',
       secret: '你的secret'
     };
     var alidayu = new Alidayu(config);
     //参数 见:http://open.taobao.com/doc2/apiDetail.htm?apiId=25450
     var options = {
       sms_free_sign_name: '身份验证',
       sms_param: {
         code: options.code,
         product: '开业啦',
       },
       rec_num: options.phoneNumber, //多个手机号逗号隔开
       sms_template_code: 'SMS_36835009',
     };
     //发送短信
     alidayu.sms(options, function(err, result) {
       if(err) {
         console.log('ERROR' + err);
       }
       return done()
     });
   }
 }

sails service里的方法可以全局调用,第一个参数是各种参数,第二个参数是回调函数。

sms_template_code是短信模板,需要登录阿里大于自己注册模板或者使用官方给的模板,每个模板号不一样

Controller文件:

/**
 * SendController
 *
 * @description :: Server-side logic for managing Sends
 * @help    :: See http://sailsjs.org/#!/documentation/concepts/Controllers
 */
var crypto = require('crypto');
module.exports = {
  //发送短信
  sendMsg: function(req, res) {
    var sercrt = "yhkevin";
    var code = '';
    var time = Date.now();
    var phoneNumber = req.param('phoneNumber')
    var totle = ''
    var token = ''
    for(var i = 0; i < 4; i++) {
      code += Math.floor(Math.random() * 10);
    }
    totle = sercrt + code + time + phoneNumber;
    sails.log('验证码是:'+code)
    token = hash(totle);
    sails.log('token:' + token)
    SmsService.sendSms({
      phoneNumber: phoneNumber,
      code: code
    }, function(err) {
      if(err) {
        return res.serverError(err);
      }
      return res.json({
        token: token,
        time: time
      });
    })
  },
  //验证验证码并且注册用户
  check:function(req,res){
    var sercrt = "yhkevin";
    var code = req.param('code');
    var time = req.param('time')
    var phoneNumber = req.param('phoneNumber')
    var token1 = req.param('token')
    var totle = ''
    var token2 = ''
    totle = sercrt + code + time + phoneNumber ; 
    token2 = hash(totle);
    console.log(token2)
    if(token1 == token2){
      res.json({result:'注册成功'})
    }else{
      res.json({err:'验证码错误'})
    }
  }
};
function hash(code) {
  var content = code; //加密的明文;
  var md5 = crypto.createHash('md5'); //定义加密方式:md5不可逆,此处的md5可以换成任意hash加密的方法名称;
  md5.update(content);
  var d = md5.digest('hex'); //加密后的值d
  return d;
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
Ajax,UTF-8还是GB2312 eval 还是execScript
Nov 13 Javascript
Javascript调用C#代码
Jan 17 Javascript
jquery和javascript的区别(常用方法比较)
Jul 04 Javascript
js创建元素(节点)示例
Jan 02 Javascript
js实现图片从左往右渐变切换效果的方法
Feb 06 Javascript
浅析函数声明和函数表达式——函数声明的声明提前
May 03 Javascript
VUEJS实战之修复错误并且美化时间(2)
Jun 13 Javascript
js判断空对象的实例(超简单)
Jul 26 Javascript
vue修改vue项目运行端口号的方法
Aug 04 Javascript
js中apply()和call()的区别与用法实例分析
Aug 14 Javascript
实用的Vue开发技巧
May 30 Javascript
对TypeScript库进行单元测试的方法
Jul 18 Javascript
jQuery实现手机上输入后隐藏键盘功能
Jan 04 #Javascript
AngularJS控制器controller给模型数据赋初始值的方法
Jan 04 #Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
Jan 04 #Javascript
微信小程序 石头剪刀布实例代码
Jan 04 #Javascript
使用JavaScript为一张图片设置备选路径的方法
Jan 04 #Javascript
微信小程序 Canvas增强组件实例详解及源码分享
Jan 04 #Javascript
AngularJS入门示例之Hello World详解
Jan 04 #Javascript
You might like
php跨站攻击实例分析
2014/10/28 PHP
php+ajax实现仿百度查询下拉内容功能示例
2017/10/20 PHP
PHP基于openssl实现的非对称加密操作示例
2019/01/11 PHP
用JQuery模仿淘宝的图片放大镜显示效果
2011/09/15 Javascript
js采用map取到id集合组并且实现点击一行选中一行
2013/12/16 Javascript
jQuery事件用法实例汇总
2014/08/29 Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
jQuery内部原理和实现方式浅析
2015/02/03 Javascript
jQuery的文档处理程序详解
2016/05/10 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
2016/06/03 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
ES6学习笔记之map、set与数组、对象的对比
2018/03/01 Javascript
对 Vue-Router 进行单元测试的方法
2018/11/05 Javascript
Vue.js子组件向父组件通信的方法实例代码详解
2018/12/10 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
2019/12/17 Javascript
Vue+tracking.js 实现前端人脸检测功能
2020/04/16 Javascript
在Python中使用判断语句和循环的教程
2015/04/25 Python
使用Python的PIL模块来进行图片对比
2016/02/18 Python
Django 用户认证组件使用详解
2019/07/23 Python
python 工具 字符串转numpy浮点数组的实现
2020/03/14 Python
解决windows下python3使用multiprocessing.Pool出现的问题
2020/04/08 Python
如何在Python对Excel进行读取
2020/06/04 Python
Python openpyxl模块实现excel读写操作
2020/06/30 Python
Matplotlib中rcParams使用方法
2021/01/05 Python
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
运动会致辞稿50字
2014/02/04 职场文书
大课间活动实施方案
2014/03/06 职场文书
工程管理英文求职信
2014/03/18 职场文书
职位说明书范文
2014/05/07 职场文书
文明之星事迹材料
2014/05/09 职场文书
民用住房租房协议书
2014/10/29 职场文书
2014年学习部工作总结
2014/11/12 职场文书
一次性工伤赔偿协议书范本
2014/11/25 职场文书
国庆阅兵观后感
2015/06/15 职场文书
网络研修心得体会
2016/01/08 职场文书
TV动画《间谍过家家》公开PV
2022/03/20 日漫