通过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 相关文章推荐
Raphael一个用于在网页中绘制矢量图形的Javascript库
Jan 08 Javascript
require.js的用法详解
Oct 20 Javascript
浅谈vuejs实现数据驱动视图原理
Feb 23 Javascript
详解使用vue-cli脚手架初始化Vue项目下的项目结构
Mar 08 Javascript
angular6 利用 ngContentOutlet 实现组件位置交换(重排)
Nov 02 Javascript
微信小程序位置授权处理方法
Jun 13 Javascript
jquery实现垂直无限轮播的方法分析
Jul 16 jQuery
Vue3.x源码调试的实现方法
Oct 13 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
Jul 21 Javascript
Vue清除定时器setInterval优化方案分享
Jul 21 Javascript
canvas绘制折线路径动画实现
May 12 Javascript
ajax请求前端跨域问题原因及解决方案
Oct 16 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
SONY SRF-40W电路分析
2021/03/02 无线电
PHP设置图片文件上传大小的具体实现方法
2013/10/11 PHP
PHP实现一维数组转二维数组的方法
2015/02/25 PHP
YII CLinkPager分页类扩展增加显示共多少页
2016/01/29 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
jQuery实现dialog设置focus焦点的方法
2015/06/10 Javascript
jQuery中$.ajax()方法参数解析
2016/10/22 Javascript
快速实现jQuery多级菜单效果
2017/02/01 Javascript
BootStrap与Select2使用小结
2017/02/17 Javascript
vue-router懒加载速度缓慢问题及解决方法
2018/11/25 Javascript
JavaScript常用内置对象用法分析
2019/07/09 Javascript
VUE实现Studio管理后台之鼠标拖放改变窗口大小
2020/03/04 Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
2020/05/09 Javascript
Element Tooltip 文字提示的使用示例
2020/07/26 Javascript
简单谈谈Python中的json与pickle
2017/07/19 Python
Python基于opencv的图像压缩算法实例分析
2018/05/03 Python
Pycharm设置界面全黑的方法
2018/05/23 Python
Python Socket编程之多线程聊天室
2018/07/28 Python
Python异常处理操作实例详解
2018/08/28 Python
Python正则表达式指南 推荐
2018/10/09 Python
Django结合ajax进行页面实时更新的例子
2019/08/12 Python
基于python实现雪花算法过程详解
2019/11/16 Python
python读取raw binary图片并提取统计信息的实例
2020/01/09 Python
pytorch 查看cuda 版本方式
2020/06/23 Python
python爬虫基础之urllib的使用
2020/12/31 Python
可贵的沉默教学反思
2014/02/06 职场文书
公司业务员岗位职责
2014/03/18 职场文书
孝敬父母的演讲稿
2014/05/14 职场文书
个人批评与自我批评总结
2014/10/17 职场文书
2014年管理工作总结
2014/11/22 职场文书
索赔员岗位职责
2015/02/15 职场文书
上级领导检查欢迎词
2015/09/30 职场文书
导游词之海南天涯海角
2019/12/05 职场文书
Java面试题冲刺第十六天--消息队列
2021/08/07 面试题
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL