通过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 相关文章推荐
escape、encodeURI、encodeURIComponent等方法的区别比较
Dec 27 Javascript
JQuery1.4+ Ajax IE8 内存泄漏问题
Oct 15 Javascript
jQuery EasyUI API 中文文档 - Draggable 可拖拽
Sep 29 Javascript
简约JS日历控件 实例代码
Jul 12 Javascript
jquery层级选择器的实现(匹配后代元素div)
Sep 05 Javascript
微信小程序实现红包功能(后端PHP实现逻辑)
Jul 11 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
Nov 02 Javascript
小程序异步问题之多个网络请求依次执行并依次收集请求结果
May 05 Javascript
通过循环优化 JavaScript 程序
Jun 24 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
Nov 01 Javascript
Node如何后台数据库使用增删改查功能
Nov 21 Javascript
vue 中使用print.js导出pdf操作
Nov 13 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生成网页快照 不用COM不用扩展.
2010/02/11 PHP
php文本转图片自动换行的方法
2013/03/13 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
2014/07/23 PHP
PHP生成数组再传给js的方法
2014/08/07 PHP
php cookie中点号(句号)自动转为下划线问题
2014/10/21 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
Js 订制自己的AlertBox(信息提示框)
2009/01/09 Javascript
IE浏览器打印的页眉页脚设置解决方法
2009/12/08 Javascript
javascript中简单的进制转换代码实例
2013/10/26 Javascript
Nodejs中 npm常用命令详解
2016/07/04 NodeJs
自制微信公众号一键排版工具
2016/09/22 Javascript
解决前端跨域问题方案汇总
2016/11/20 Javascript
原生和jQuery的ajax用法详解
2017/01/23 Javascript
jQuery实现标签页效果实战(4)
2017/02/08 Javascript
js提取中文拼音首字母的封装工具类
2018/03/12 Javascript
微信小程序实现随机验证码功能
2018/12/20 Javascript
浅谈vue3中effect与computed的亲密关系
2019/10/10 Javascript
JavaScript中的执行环境和作用域链
2020/09/04 Javascript
关于ES6尾调用优化的使用
2020/09/11 Javascript
在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)
2020/09/11 Javascript
[01:05:40]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第三场
2014/05/24 DOTA
[01:20]DOTA2 2017国际邀请赛冠军之路无止竞
2017/06/19 DOTA
Python实例之wxpython中Frame使用方法
2014/06/09 Python
Python变量和字符串详解
2017/04/29 Python
python Flask 装饰器顺序问题解决
2018/08/08 Python
Python实现的大数据分析操作系统日志功能示例
2019/02/11 Python
python+selenium实现简历自动刷新的示例代码
2019/05/20 Python
python urllib爬虫模块使用解析
2019/09/05 Python
使用python切片实现二维数组复制示例
2019/11/26 Python
canvas如何绘制钟表的方法
2017/12/13 HTML / CSS
香港优质食材和美酒专门店:FoodWise
2017/09/01 全球购物
越南电子产品购物网站:FPT Shop
2017/12/02 全球购物
L’AGENCE官网:加州女装品牌
2018/06/03 全球购物
网吧最新创业计划书范文
2014/03/27 职场文书
房屋授权无偿使用证明
2014/11/29 职场文书
CSS3 Tab动画实例之背景切换动态效果
2021/08/23 HTML / CSS