通过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 相关文章推荐
extjs 的权限问题 要求控制的对象是 菜单,按钮,URL
Mar 09 Javascript
javascript与CSS复习(《精通javascript》)
Jun 29 Javascript
js中定义一个变量并判断其是否为空的方法
May 13 Javascript
使用RequireJS优化JavaScript引用代码的方法
Jul 01 Javascript
java中String类型变量的赋值问题介绍
Mar 23 Javascript
微信公众号开发 实现点击返回按钮就返回到聊天界面
Dec 15 Javascript
基于JavaScript实现拖动滑块效果
Feb 16 Javascript
详解Angular.js中$http拦截器的介绍及使用
Jul 04 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
Mar 16 Javascript
Vue拖拽组件开发实例详解
May 11 Javascript
TypeScript基础入门教程之三重斜线指令详解
Oct 22 Javascript
vue和better-scroll实现列表左右联动效果详解
Apr 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
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
2014/06/23 PHP
PHP实现截取中文字符串不出现?号的解决方法
2016/12/29 PHP
js下用eval生成JSON对象
2010/09/17 Javascript
jQuery EasyUI API 中文文档 - Form表单
2011/10/06 Javascript
javascript对中文按照拼音排序代码
2014/08/20 Javascript
jQuery中append()方法用法实例
2015/01/08 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
复杂的javascript窗口分帧解析
2016/02/19 Javascript
Bootstrap和Java分页实例第二篇
2016/12/23 Javascript
最常见和最有用的字符串相关的方法详解
2017/02/06 Javascript
jQuery仿IOS弹出框插件
2017/02/18 Javascript
微信小程序 判断手机号的实现代码
2017/04/19 Javascript
nodejs 终端打印进度条实例代码
2017/04/22 NodeJs
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
2017/05/09 Javascript
layer弹窗插件操作方法详解
2017/05/19 Javascript
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
关于express与koa的使用对比详解
2018/01/25 Javascript
vue服务端渲染缓存应用详解
2018/09/12 Javascript
让webpack+vue-cil项目不再自动打开浏览器的方法
2018/09/27 Javascript
学习node.js 断言的使用详解
2019/03/18 Javascript
js实现无缝轮播图
2020/03/09 Javascript
js实现批量删除功能
2020/08/27 Javascript
[04:11]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/01/30 DOTA
Go语言基于Socket编写服务器端与客户端通信的实例
2016/02/19 Python
详解Python如何生成词云的方法
2018/06/01 Python
使用TensorFlow搭建一个全连接神经网络教程
2020/02/06 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
2020/04/01 Python
Django 允许局域网中的机器访问你的主机操作
2020/05/13 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
2020/09/03 Python
工艺工程师工作职责
2013/11/23 职场文书
家居设计专业个人自荐信范文
2013/11/26 职场文书
花店创业计划书范文
2014/02/07 职场文书
廉洁教育学习材料
2014/05/19 职场文书
劳动竞赛口号
2014/06/16 职场文书
心得体会该怎么写呢?
2019/06/27 职场文书
CentOS下安装Jenkins的完整步骤
2022/04/07 Servers