node中使用短信验证功能(阿里云为例)

Posted 苦海123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node中使用短信验证功能(阿里云为例)相关的知识,希望对你有一定的参考价值。

一、选择短信平台
短信平台有很多,这里我选择阿里云,详细步骤如下:

  1. 进入短信控制台,对要发送的短信格式进行配置,如果没有签名,需要申请签名后操作(注意:需要自己已有阿里云账号且实名认证成功)
  2. 按照如下步骤配置:
  3. 配置好后就可以生成一个AccessKey ID(存在于安全信息管理),用于写node服务代码,如:
  4. node中代码案例如下:
const Core = require('@alicloud/pop-core'); //cwen 调用阿里短信模块(需先安装)
//对阿里短信服务API进行配置
let client = new Core(
 accessKeyId: '<accessKeyId>', // 按照上面步骤及阿里云提示在阿里云平台申请
 accessKeySecret: '<accessSecret>', // 先申请
 endpoint: 'https://dysmsapi.aliyuncs.com', //无需更改
 apiVersion: '2017-05-25' //无需更改
);
//配置请求方式
let requestOption = 
  method: 'POST'
;
 
//生成随机四位数,模拟验证码
function rander(max, min) 
  return Math.floor(Math.random() * (max - min)) + min

// 存储手机号+验证码(方便验证)
var loginInfo = [];
//验证手机号是否已经发送个验证码
let validate = (phone) => 
  return loginInfo.some(item => item.phone === phone)

//验证验证码是否一致
let validateCode = (phone, code) => 
  return loginInfo.some(item => (item.phone === phone && item.code == code))

 
//用阿里云api发送短信验证(验证码登录)
let sendLoginCroeCode = async(req, res) => 
  let  phone  = req.body;
  let randCode = rander(1000, 9999);
  var params = 
      "RegionId": "cn-hangzhou",
      "PhoneNumbers": phone, // 客户端手机号
      "SignName": "小陈应用ya", //签名
      "TemplateCode": "SMS_197625305", //模板,用于发送文字信息
      "TemplateParam": JSON.stringify( 'code': randCode ) //指定要发送的验证码(此处以rander 函数为例)
    
     //发送验证码之前判断手机号是否注册过
  if (await isRegister(phone))  // 此处为数据库操作
    client.request('SendSms', params, requestOption).then((result) => 
      if (result.Code == 'OK') 
        res.send(
          status: 200,
          msg: '发送成功'
        );
        loginInfo.push(
          phone: phone,
          code: randCode
        );
        console.log(randCode)
       else 
        res.send(
          status: 400,
          msg: '发送失败'
        )
      
    )
   else 
    res.send(
      status: 400,
      msg: '该手机号未注册'
    )
  

 
//验证码登录接口
let phoneCodeLogin = async(req, res) => 
  let  phone, code  = req.body;
  if (validate(phone))  //判断手机号是否发送过验证码
    if (validateCode(phone, code))  // 判断验证码与手机号是否匹配
      let user = await isFirstLogin(phone); // 此处为数据库操作,获取用户信息
      res.send(
        status: 200,
        msg: '登录成功',
        data: user[0]
      )
      loginInfo = []; // 登录成功,立马清空数组,以免无法再次发送验证码
     else 
      res.send(
        status: 400,
        msg: '验证码错误'
      )
    
   else 
    res.send(
      status: 400,
      msg: '未获取验证码'
    )
  

 //如果在其它文件中使用,将此文件暴露并在其它文件引入

5.使用,此文章为完结,近期会进行修改!
提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:810665436@qq.com联系笔者删除。
笔者:苦

以上是关于node中使用短信验证功能(阿里云为例)的主要内容,如果未能解决你的问题,请参考以下文章

Node 接入阿里云实现短信验证码

Java实现短信发送

Java 使用阿里云短信的API接口

阿里云升级版短信验证教程PHP篇

阿里云升级版短信验证教程PHP篇

阿里云升级版短信验证教程PHP篇