通过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 相关文章推荐
JS清空多文本框、文本域示例代码
Feb 24 Javascript
PHP结合jQuery实现的评论顶、踩功能
Jul 22 Javascript
JavaScript取得键盘按下方向键是哪个的方法
Aug 04 Javascript
通过BootStrap实现轮播图的实际应用
Sep 26 Javascript
js判断文件格式及大小的简单实例(必看)
Oct 11 Javascript
微信小程序“摇一摇”的实例代码
Jul 20 Javascript
bootstrap实现点击删除按钮弹出确认框的实例代码
Aug 16 Javascript
微信小程序实现省市区三级地址选择
Jun 21 Javascript
解决vue-router 二级导航默认选中某一选项的问题
Nov 01 Javascript
基于javascript处理nginx请求过程详解
Jul 07 Javascript
js 数据类型判断的方法
Dec 03 Javascript
五句话帮你轻松搞定js原型链
Dec 09 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
PHP4实际应用经验篇(5)
2006/10/09 PHP
php设计模式之单例模式实例分析
2015/02/25 PHP
基于laravel制作APP接口(API)
2016/03/15 PHP
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
javascript 解析url的search方法
2010/02/09 Javascript
javascript定义函数的方法
2010/12/06 Javascript
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
自定义的一个简单时尚js下拉选择框
2013/11/20 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
2013/12/03 Javascript
javaScript如何生成xmlhttp
2013/12/16 Javascript
Javascript 按位与运算符 (&amp;)使用介绍
2014/02/04 Javascript
搭建pomelo 开发环境
2014/06/24 Javascript
js中string转int把String类型转化成int类型
2014/08/13 Javascript
Javascript判断文件是否存在(客户端/服务器端)
2014/09/16 Javascript
完美兼容各大浏览器的jQuery插件实现图片切换特效
2014/12/12 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
纯js实现瀑布流布局及ajax动态新增数据
2016/04/07 Javascript
微信小程序 swiper组件详解及实例代码
2016/10/25 Javascript
vue.js给动态绑定的radio列表做批量编辑的方法
2018/02/28 Javascript
vue history 模式打包部署在域名的二级目录的配置指南
2019/07/02 Javascript
p5.js实现动态图形临摹
2019/10/23 Javascript
使用p5.js实现动态GIF图片临摹重现
2019/10/23 Javascript
vue.js路由mode配置之去掉url上默认的#方法
2019/11/01 Javascript
[01:02:25]2014 DOTA2华西杯精英邀请赛 5 24 iG VS DK
2014/05/26 DOTA
[02:05]DOTA2完美大师赛趣味视频之看我表演
2017/11/18 DOTA
Python中实现结构相似的函数调用方法
2015/03/10 Python
python结合API实现即时天气信息
2016/01/19 Python
python thrift搭建服务端和客户端测试程序
2018/01/17 Python
Django使用AJAX调用自己写的API接口的方法
2019/03/06 Python
Python面向对象之类和实例用法分析
2019/06/08 Python
python 读取更新中的log 或其它文本方式
2019/12/24 Python
python help函数实例用法
2020/12/06 Python
CSS3+Sprite实现僵尸行走动画特效源码
2016/01/27 HTML / CSS
大学生应聘求职信
2014/05/26 职场文书
《我们的民族小学》教学反思
2016/02/19 职场文书
Java并发编程之原子性-Atomic的使用
2022/03/16 Java/Android