通过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 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
Sep 27 Javascript
JavaScript使用focus()设置焦点失败的解决方法
Sep 03 Javascript
Javascript中this的用法详解
Sep 22 Javascript
jQuery实现自动输入email、时间和域名的方法
Aug 24 Javascript
简单实现Vue的observer和watcher
Dec 21 Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
Jul 05 Javascript
JS脚本加载后执行相应回调函数的操作方法
Feb 28 Javascript
node.js实现带进度条的多文件上传
Mar 27 Javascript
原生js+canvas实现下雪效果
Aug 02 Javascript
VUE 实现element upload上传图片到阿里云
Aug 12 Javascript
vue+springboot实现登录验证码
May 27 Vue.js
JS前端宏任务微任务及Event Loop使用详解
Jul 23 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
source.php查看源文件
2006/12/09 PHP
php 连接mssql数据库 初学php笔记
2010/03/01 PHP
PHP 根据IP地址控制访问的代码
2010/04/22 PHP
php 定界符格式引起的错误
2011/05/24 PHP
PHP序列化/对象注入漏洞分析
2016/04/18 PHP
PHP输出Excel PHPExcel的方法
2018/07/26 PHP
laravel Model 执行事务的实现
2019/10/10 PHP
PHP高并发和大流量解决方案整理
2021/03/09 PHP
javascript 硬盘序列号+其它硬件信息
2008/12/23 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
JavaScript实现点击按钮就复制当前网址
2015/12/14 Javascript
JS防止网页被嵌入iframe框架的方法分析
2016/09/13 Javascript
jQuery 选择器(61种)整理总结
2016/09/26 Javascript
Javascript中判断一个值是否为undefined的方法详解
2016/09/28 Javascript
bootstrap导航栏、下拉菜单、表单的简单应用实例解析
2017/01/06 Javascript
JS异步函数队列功能实例分析
2017/11/28 Javascript
Vue引入jquery实现平滑滚动到指定位置
2018/05/09 jQuery
在 Angular6 中使用 HTTP 请求服务端数据的步骤详解
2018/08/06 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
详解项目升级到vue-cli3的正确姿势
2019/01/28 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
微信小程序学习总结(五)常见问题实例小结
2020/06/04 Javascript
[01:20:06]TNC vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python 查找文件夹下所有文件 实现代码
2009/07/01 Python
Python测试网络连通性示例【基于ping】
2018/08/03 Python
python 使用装饰器并记录log的示例代码
2019/07/12 Python
Python socket聊天脚本代码实例
2020/01/02 Python
Python单链表原理与实现方法详解
2020/02/22 Python
virtualenv介绍及简明教程
2020/06/23 Python
python字符串拼接+和join的区别详解
2020/12/03 Python
python利用opencv实现颜色检测
2021/02/23 Python
英国珠宝钟表和家居礼品精品店:David Shuttle
2018/02/24 全球购物
奥地利体育网上商店:Gigasport
2019/10/09 全球购物
品德评语大全
2014/05/05 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
Go语言测试库testify使用学习
2022/07/23 Golang