通过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 jcrop插件截图使用方法
Nov 20 Javascript
JS创建类和对象的两种不同方式
Aug 08 Javascript
javascript操作字符串的原生方法
Dec 22 Javascript
angularJs关于指令的一些冷门属性详解
Oct 24 Javascript
简单实现JavaScript弹幕效果
Aug 27 Javascript
Vue.js中数据绑定的语法教程
Jun 02 Javascript
AjaxUpLoad.js实现文件上传功能
Mar 02 Javascript
在vue项目中引入highcharts图表的方法(详解)
Mar 05 Javascript
垃圾回收器的相关知识点总结
May 13 Javascript
详解vue2.6插槽更新v-slot用法总结
Mar 09 Javascript
详细介绍解决vue和jsp结合的方法
Feb 06 Javascript
Vue实现购物小球抛物线的方法实例
Nov 22 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中的内存管理问题
2011/08/31 PHP
php删除页面记录 同时刷新页面 删除条件用GET方式获得
2012/01/10 PHP
PHP模板引擎smarty详细介绍
2015/05/26 PHP
浅谈php的优缺点
2015/07/14 PHP
php反射学习之依赖注入示例
2019/06/14 PHP
php+mysql实现的无限分类方法类定义与使用示例
2020/05/27 PHP
js select option对象小结
2013/12/20 Javascript
Javascript写入txt和读取txt文件示例
2014/02/12 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
2015/12/04 Javascript
运用js教你轻松制作html音乐播放器
2020/04/17 Javascript
vue多级多选菜单组件开发
2020/09/08 Javascript
JS生成一维码(条形码)功能示例
2017/01/19 Javascript
Angular 4.x 路由快速入门学习
2017/05/03 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
2018/01/22 jQuery
JS变量提升及函数提升实例解析
2020/09/03 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
react-native 实现购物车滑动删除效果的示例代码
2021/01/15 Javascript
django初始化数据库的实例
2018/05/27 Python
Python内置random模块生成随机数的方法
2019/05/31 Python
python如何使用socketserver模块实现并发聊天
2019/12/14 Python
Python 使用 PyQt5 开发的关机小工具分享
2020/07/16 Python
解决python打开https出现certificate verify failed的问题
2020/09/03 Python
Python基于execjs运行js过程解析
2020/11/27 Python
美国韩国化妆品和护肤品购物网站:Beautytap
2018/07/29 全球购物
3个CCIE对一个工程师的面试题
2012/05/06 面试题
统计员岗位职责
2013/11/14 职场文书
餐饮业创业计划书范文
2014/01/06 职场文书
留学推荐信写作指南
2014/01/25 职场文书
医学院毕业生自荐信范文
2014/03/06 职场文书
乡镇消防工作实施方案
2014/03/27 职场文书
导师推荐信范文
2014/05/09 职场文书
债务纠纷委托书
2014/08/30 职场文书
绿色校园广播稿
2014/10/13 职场文书
2019年手机市场的调研报告2篇
2019/10/10 职场文书
jquery插件实现悬浮的菜单
2021/04/24 jQuery
go设置多个GOPATH的方式
2021/05/05 Golang