通过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 相关文章推荐
Javascript中Eval函数的使用
Mar 23 Javascript
checkbox使用示例
Aug 23 Javascript
js控制frameSet示例
Sep 10 Javascript
JS中window.open全屏命令解析及使用示例
Dec 11 Javascript
Iframe 自动适应页面的高度示例代码
Feb 26 Javascript
node.js中的console.dir方法使用说明
Dec 10 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
Mar 20 Javascript
AngularJS的ng Http Request与response格式转换方法
Nov 07 Javascript
JavaScript如何实现图片懒加载(lazyload) 提高用户体验(增强版)
Nov 30 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
Mar 07 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
Nov 21 Javascript
React优化子组件render的使用
May 12 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
在PWS上安装PHP4.0正式版
2006/10/09 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
2017/02/28 PHP
PHP分页显示的方法分析【附PHP通用分页类】
2018/05/10 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
Javascript的IE和Firefox兼容性汇编(zz)
2007/02/02 Javascript
js 跨域和ajax 跨域问题小结
2009/07/01 Javascript
JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )
2011/02/25 Javascript
12款经典的白富美型—jquery图片轮播插件—前端开发必备
2013/01/08 Javascript
浅析JQuery UI Dialog的样式设置问题
2013/12/18 Javascript
Javascript中Date类型和Math类型详解
2016/02/27 Javascript
利用jQuery实现CheckBox全选/全不选/反选的简单代码
2016/05/31 Javascript
BootStrap实现轮播图效果(收藏)
2016/12/30 Javascript
12306 刷票脚本及稳固刷票脚本(防挂)
2017/01/04 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
MVVM框架下实现分页功能示例
2018/06/14 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
实例分析编写vue组件方法
2019/02/12 Javascript
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
js实现可爱的气泡特效
2020/09/05 Javascript
[03:05]DOTA2英雄基础教程 嗜血狂魔
2013/12/10 DOTA
python使用多线程不断刷新网页的方法
2015/03/31 Python
python字典排序实例详解
2015/05/20 Python
django之对FileField字段的upload_to的设定方法
2019/07/28 Python
flask 实现token机制的示例代码
2019/11/07 Python
python def 定义函数,调用函数方式
2020/06/02 Python
美国滑雪和滑雪板商店:Buckman
2018/03/03 全球购物
俄罗斯香水和化妆品购物网站:Л’Этуаль
2018/05/10 全球购物
三星新西兰官网:Samsung新西兰
2019/03/05 全球购物
俄罗斯隐形眼镜和眼镜在线商店:Cronos
2020/06/02 全球购物
幼儿园教师辞职信
2014/01/18 职场文书
学生周末长期请假条
2014/02/15 职场文书
2016年“抗战胜利纪念日”71周年校园广播稿
2015/12/18 职场文书
《黄道婆》教学反思
2016/02/22 职场文书
python可视化之颜色映射详解
2021/09/15 Python
Java基于Dijkstra算法实现校园导游程序
2022/03/17 Java/Android
tomcat默认最大连接数及相关调整方法
2022/05/06 Servers