博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
发送短信验证码-node+阿里云短信
阅读量:6085 次
发布时间:2019-06-20

本文共 2574 字,大约阅读时间需要 8 分钟。

一、准备工作  

前端:

    表单

    提交方式--- get 、post

        整体提交

        ajax提交

    表单验证

        正则表达式---不轻易自己写正则,不是不写,一定要考虑好兼容性(全面性)---- 提示信息的选择性

    图形验证码

        后端进行提供的一张图片,并且这张图片会对应一个字段,这个字段传递给前端,前端负责校验即可

    短信验证码

        判断是不是手机号

        如果是,那么就发送此手机号給后端,后端继续进行操作

    第三方登录

        qq登录,微信登录,微博登录

        appid appsecret appkey

后端:

    get

        url.parse(req.url, true).query

    post

        req.body

    短信验证

        1、搞定短信包----发送短信

        阿里云短信服务

        https://www.aliyun.com/

 

        短信接口的调用--https://help.aliyun.com/document_detail/57458.html?spm=5176.10629532.106.4.36c21cbe53q1qJ

         秘钥管理页面 -- https://ak-console.aliyun.com/?spm=a2c4g.11186623.2.5.M6srOG#/accesskey

        

    开发:

cnpm i @alicloud/sms-sdk -S

tool/mycode.js  ----  此处代码不要更改,除非你有自己的账号

const SMSClient = require('@alicloud/sms-sdk')

const accessKeyId = 'LTAIZQoVVoPuBjU9'

const secretAccessKey = 'GfJuI2dLsCQh7Q56TmFxPTniXjkVnB'

let smsClient = new SMSClient({accessKeyId, secretAccessKey})

exports.sendCode = function ( options ) {

      smsClient.sendSMS({

        PhoneNumbers: options.phoneNum,

        SignName: '吴勋勋',//按照严格意义来说,此处的签名和模板的ID都是可变的

        TemplateCode: 'SMS_111785721',

        TemplateParam: '{code:'+ options.code +'}'

    }).then(function (res) {

        let {Code}=res

        if (Code === 'OK') {

            //处理返回参数

            // console.log("111111111111111111111")

            options.success('ok')

        }

    }, function (err) {

        console.log(err)

    })

}

需要调用发送短信的地方

users.js

var url = require('url');

var async = require('async');

var { MongoClient } = require('mongodb');

var mongourl = "mongodb://localhost:27017/bk1803";

var { sendCode } = require('./mycode.js')

module.exports = {

    defaultRoute: ( req, res, next ) => {

     res.render('users');

    },

  getPhoneCode( req, res, next ){

    var { phoneNum } = url.parse( req.url, true ).query;

    async.waterfall( [

      ( cb ) => {

        MongoClient.connect( mongourl, ( err, db ) => {

          if ( err ) throw err;

          cb( null, db);

        })

      },

      ( db, cb ) => {

        db.collection('users').find({phoneNum},{_id:0}).toArray( ( err, res ) => {

          if ( err ) throw err;

          if( res.length == 0 ) {

            cb( null, 1);

          }else {

            cb( null, 0);

          }

          db.close();

        })

      }

    ], ( err, result ) => {

      if ( err ) throw err;

      if( result == 1) {

        sendCode({

          phoneNum,

          code:'3456',

          success:function(data){

            if(data == "ok"){

              res.send("1")

            }

          }

        })

      }else{

        res.send("0")

      }

    })

    

  },

  registerUserAction( req, res, next ){

    var { phoneNum, password } = req.body;

    async.waterfall( [

        ( cb ) => {

            MongoClient.connect( mongourl, ( err, db ) => {

                if ( err ) throw err;

                cb( null, db);

            })

        },

        ( db, cb ) => {

            db.collection('users').insert({phoneNum, password}, ( err, res ) =>{

          if ( err ) throw err;

          cb( null, 'ok');

          db.close()

        })

        }

    ], ( err, result ) => {

      if ( err ) throw err;

       if ( result == "ok" ){

         res.send("1")

       }else{

         res.send("0")

       }

    })

  }

}

转载于:https://www.cnblogs.com/Guernicas/p/10662175.html

你可能感兴趣的文章
javafx for android or ios ?
查看>>
微软职位内部推荐-Senior Software Engineer II-Sharepoint
查看>>
sql 字符串操作
查看>>
【转】Android布局优化之ViewStub
查看>>
网络安全管理技术作业-SNMP实验报告
查看>>
根据Uri获取文件的绝对路径
查看>>
Flutter 插件开发:以微信SDK为例
查看>>
.NET[C#]中NullReferenceException(未将对象引用到实例)是什么问题?如何修复处理?...
查看>>
边缘控制平面Ambassador全解读
查看>>
Windows Phone 7 利用计时器DispatcherTimer创建时钟
查看>>
程序员最喜爱的12个Android应用开发框架二(转)
查看>>
vim学习与理解
查看>>
DIRECTSHOW在VS2005中PVOID64问题和配置问题
查看>>
MapReduce的模式,算法以及用例
查看>>
《Advanced Linux Programming》读书笔记(1)
查看>>
zabbix agent item
查看>>
一步一步学习SignalR进行实时通信_7_非代理
查看>>
AOL重组为两大业务部门 全球裁员500人
查看>>
字符设备与块设备的区别
查看>>
为什么我弃用GNOME转向KDE(2)
查看>>