通过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 相关文章推荐
详谈javascript中的cookie
Jun 03 Javascript
多功能jQuery树插件zTree实现权限列表简单实例
Jul 12 Javascript
jquery validate表单验证插件
Sep 06 Javascript
利用Node.js制作爬取大众点评的爬虫
Sep 22 Javascript
js实现一个猜数字游戏
Mar 31 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
Aug 31 Javascript
jquery一键控制checkbox全选、反选或全不选
Oct 16 jQuery
vue中如何动态绑定图片,vue中通过data返回图片路径的方法
Feb 07 Javascript
Postman模拟发送带token的请求方法
Mar 31 Javascript
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
Apr 21 Javascript
node puppeteer(headless chrome)实现网站登录
May 09 Javascript
vue element 中的table动态渲染实现(动态表头)
Nov 21 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
php for 循环语句使用方法详细说明
2010/05/09 PHP
PHP中通过加号合并数组的一个简单方法分享
2011/01/27 PHP
PHP编译安装中遇到的两个错误和解决方法
2014/08/20 PHP
Yii2.0中的COOKIE和SESSION用法
2016/08/12 PHP
PHP 输出缓冲控制(Output Control)详解
2016/08/25 PHP
Docker配置PHP开发环境教程
2016/12/21 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
比Jquery的document.ready更快的方法
2010/04/28 Javascript
JavaScript动态调整TextArea高度的代码
2010/12/28 Javascript
JavaScipt中栈的实现方法
2016/02/17 Javascript
jquery实现简单的banner轮播效果【实例】
2016/03/30 Javascript
jQuery动态添加可拖动元素完整实例(附demo源码下载)
2016/06/21 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
javascript基础知识讲解
2017/01/11 Javascript
JavaScript DOM节点操作实例小结(新建,删除HTML元素)
2017/01/19 Javascript
vue2.0数据双向绑定与表单bootstrap+vue组件
2017/02/27 Javascript
jQuery实现动态给table赋值的方法示例
2017/07/04 jQuery
基于react后端渲染模板引擎noox发布使用
2018/01/11 Javascript
你了解vue3.0响应式数据怎么实现吗
2019/06/07 Javascript
Node登录权限验证token验证实现的方法示例
2020/05/25 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
2020/11/06 Javascript
python实现决策树分类算法
2017/12/21 Python
python实现文件助手中查看微信撤回消息
2019/04/29 Python
python 实现在tkinter中动态显示label图片的方法
2019/06/13 Python
python递归下载文件夹下所有文件
2019/08/31 Python
Python基础之变量基本用法与进阶详解
2020/01/03 Python
Perfume’s Club中文官网:西班牙美妆在线零售品牌
2020/08/24 全球购物
生产部主管岗位职责
2014/01/06 职场文书
微信营销策划方案
2014/02/24 职场文书
2014年派出所工作总结
2014/11/21 职场文书
2014小学年度工作总结
2014/12/20 职场文书
委托书格式要求
2015/01/28 职场文书
我的法兰西岁月观后感
2015/06/09 职场文书
解读Vue组件注册方式
2021/05/15 Vue.js
详解Python魔法方法之描述符类
2021/05/26 Python
Python实现灰色关联分析与结果可视化的详细代码
2022/03/25 Python