通过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 文字符串转换unicode编码函数
May 30 Javascript
Javascript document.referrer判断访客来源网址
May 15 Javascript
JS DOM 操作实现代码
Aug 01 Javascript
jquery操作select方法汇总
Feb 05 Javascript
浅谈JavaScript事件的属性列表
Mar 01 Javascript
微信小程序 网络API发起请求详解
Nov 09 Javascript
用原生JS实现简单的多选框功能
Jun 12 Javascript
JavaScript插件Tab选项卡效果
Nov 14 Javascript
关闭Vue计算属性自带的缓存功能方法
Mar 02 Javascript
详解如何制作并发布一个vue的组件的npm包
Nov 10 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
May 01 Javascript
小程序实现列表倒计时功能
Jan 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
大师制作的中短波矿石收音机
2020/04/02 无线电
php生成N个不重复的随机数实例
2013/11/12 PHP
分享一个超好用的php header下载函数
2014/01/31 PHP
PHP对接微信公众平台消息接口开发流程教程
2014/03/25 PHP
destoon二次开发入门示例
2014/06/20 PHP
php访问数组最后一个元素的函数end()用法
2015/03/18 PHP
PHP实现表单提交时去除斜杠的方法
2016/12/26 PHP
PHP使用DOM对XML解析处理操作示例
2019/07/04 PHP
JS中彻底删除JSON对象组成的数组中的元素
2020/09/22 PHP
JQuery实现级联下拉框效果实例讲解
2015/09/17 Javascript
jQuery中trigger()与bind()用法分析
2015/12/18 Javascript
jquery自定义右键菜单、全选、不连续选择
2016/03/01 Javascript
第九章之路径分页标签与徽章组件
2016/04/25 Javascript
基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用
2016/05/12 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
2017/03/02 Javascript
微信小程序开发之实现自定义Toast弹框
2017/06/08 Javascript
详解在Vue中如何使用axios跨域访问数据
2017/07/07 Javascript
基于Vue实现支持按周切换的日历
2020/09/24 Javascript
详解React Native网络请求fetch简单封装
2017/08/10 Javascript
vue中vee validate表单校验的几种基本使用
2018/06/25 Javascript
vue返回上一页面时回到原先滚动的位置的方法
2018/12/20 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
Python下的Softmax回归函数的实现方法(推荐)
2017/01/26 Python
Python实现的圆形绘制(画圆)示例
2018/01/31 Python
Python 批量合并多个txt文件的实例讲解
2018/05/08 Python
Python基于opencv调用摄像头获取个人图片的实现方法
2019/02/21 Python
对python 中class与变量的使用方法详解
2019/06/26 Python
Python用摘要算法生成token及检验token的示例代码
2020/12/01 Python
美国最古老的精致书写工具制造商:A.T. Cross(高仕)
2018/01/30 全球购物
玉兰油美国官网:OLAY美国
2018/10/25 全球购物
计算机网络毕业生自荐信
2013/10/01 职场文书
南京青奥会口号
2014/06/12 职场文书
参赛口号
2014/06/16 职场文书
工程承包协议书范本
2014/09/29 职场文书
2015年学校党建工作总结
2015/05/19 职场文书
文明医院的标语集锦!
2019/07/24 职场文书