通过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获取IE上传文件路径(IE7,8)
Jul 08 Javascript
js中cookie的添加、取值、删除示例代码
Oct 21 Javascript
js确认框confirm()用法实例详解
Jan 07 Javascript
js实现prototype扩展的方法(字符串,日期,数组扩展)
Jan 14 Javascript
JS异步文件分片断点上传的实现思路
Dec 25 Javascript
妙用Angularjs实现表格按指定列排序
Jun 23 Javascript
IScroll5实现下拉刷新上拉加载的功能实例
Aug 11 Javascript
VueRouter导航守卫用法详解
Dec 25 Javascript
vue+webpack模拟后台数据的示例代码
Jul 26 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
Sep 11 Javascript
JavaScript canvas仿代码流瀑布
Feb 10 Javascript
Vue中强制组件重新渲染的正确方法
Jan 03 Vue.js
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
php实现的Timer页面运行时间监测类
2014/09/24 PHP
PHP中使用socket方式GET、POST数据实例
2015/04/02 PHP
php判断是否连接上网络的方法实例详解
2016/12/14 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
Laravel 6.2 中添加了可调用容器对象的方法
2019/10/22 PHP
(JS实现)MapBar中坐标的加密和解密的脚本
2007/05/16 Javascript
在模板页面的js使用办法
2010/04/01 Javascript
改写一个简单的菜单 弹性大小
2010/12/02 Javascript
选择器中含有空格在使用示例及注意事项
2013/07/31 Javascript
jquery实现手风琴效果实例代码
2013/11/15 Javascript
Array栈方法和队列方法的特点说明
2014/01/24 Javascript
jQuery实现360°全景拖动展示
2015/03/18 Javascript
微信小程序 教程之注册页面
2016/10/17 Javascript
JavaScript自动点击链接 防止绕过浏览器访问的方法
2017/01/19 Javascript
微信小程序实现留言板(Storage)
2018/11/02 Javascript
js实现无缝轮播图插件封装
2020/07/31 Javascript
vue中的计算属性和侦听属性
2020/11/06 Javascript
Python入门篇之函数
2014/10/20 Python
推荐11个实用Python库
2015/01/23 Python
python daemon守护进程实现
2016/08/27 Python
Python中表示字符串的三种方法
2017/09/06 Python
python中pytest收集用例规则与运行指定用例详解
2019/06/27 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
2019/06/28 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
python实现输入的数据在地图上生成热力图效果
2019/12/06 Python
Python日志:自定义输出字段 json格式输出方式
2020/04/27 Python
密封类可以有虚函数吗
2014/08/11 面试题
加多宝凉茶广告词
2014/03/18 职场文书
教师岗位聘任书范文
2014/03/29 职场文书
道德之星事迹材料
2014/05/03 职场文书
2015年安全生产责任书
2015/01/30 职场文书
光荣之路观后感
2015/06/12 职场文书
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL
Python pandas读取CSV文件的注意事项(适合新手)
2021/06/20 Python
《仙剑客栈2》第一弹正式宣传片公开 年内发售
2022/04/07 其他游戏
前端框架ECharts dataset对数据可视化的高级管理
2022/12/24 Javascript