通过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 相关文章推荐
jQuery ajax cache缓存问题
Jul 01 Javascript
jquery使用append(content)方法注意事项分享
Jan 06 Javascript
jquery缓动swing liner控制动画过程不同时刻的速度
May 29 Javascript
jquery实现类似淘宝星星评分功能有截图
Sep 15 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
Jan 08 Javascript
浅析函数声明和函数表达式——函数声明的声明提前
May 03 Javascript
js定时器实例分享
Dec 20 Javascript
js实现扫雷小程序的示例代码
Sep 27 Javascript
vue拖拽组件使用方法详解
Dec 01 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
Sep 18 Javascript
javascript 数组精简技巧小结
Feb 26 Javascript
JavaScript隐式类型转换代码实例
May 29 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 flv视频时间获取函数
2010/06/29 PHP
php+ajax实现的点击浏览量加1
2015/04/16 PHP
ThinkPHP框架里隐藏index.php
2016/04/12 PHP
yii2缓存Caching基本用法示例
2016/07/18 PHP
PHP文件系统管理(实例讲解)
2017/09/19 PHP
NodeJS制作爬虫全过程(续)
2014/12/22 NodeJs
jquery插件orbit.js实现图片折叠轮换特效
2015/04/14 Javascript
jQuery的css() 方法使用指南
2015/05/03 Javascript
Vue.js 2.0 移动端拍照压缩图片上传预览功能
2017/03/06 Javascript
jQuery实现选项卡功能(两种方法)
2017/03/08 Javascript
JS中正则表达式全局匹配模式 /g用法详解
2017/04/01 Javascript
JSON创建键值对(key是中文或者数字)方式详解
2017/08/24 Javascript
JavaScript使用FileReader实现图片上传预览效果
2020/03/27 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
JS模拟实现哈希表及应用详解
2018/05/04 Javascript
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
2018/10/31 Javascript
BootStrap modal实现拖拽功能
2018/12/01 Javascript
python和C语言混合编程实例
2014/06/04 Python
Python实现简单拆分PDF文件的方法
2015/07/30 Python
通过Python使用saltstack生成服务器资产清单
2016/03/01 Python
Python向日志输出中添加上下文信息
2017/05/24 Python
python2.7读取文件夹下所有文件名称及内容的方法
2018/02/24 Python
python中for循环输出列表索引与对应的值方法
2018/11/07 Python
Python利用pandas处理Excel数据的应用详解
2019/06/18 Python
利用rest framework搭建Django API过程解析
2019/08/31 Python
Python字符串的修改方法实例
2019/12/19 Python
关于初始种子自动选取的区域生长实例(python+opencv)
2020/01/16 Python
50个强大璀璨的CSS3/JS技术运用实例
2010/02/27 HTML / CSS
澳大利亚Rockwear官网:女子瑜伽、健身和运动服
2021/01/26 全球购物
《开国大典》教学反思
2014/04/19 职场文书
文明礼貌演讲稿
2014/05/12 职场文书
聘用意向书
2014/07/29 职场文书
个人总结怎么写
2015/02/26 职场文书
2016党员三严三实心得体会
2016/01/15 职场文书
新西兰:最新留学学习计划书写作指南
2019/07/15 职场文书
JS中如何优雅的使用async await详解
2021/10/05 Javascript