Node 短信验证

购买阿里云短信服务

在这里插入图片描述
在这里插入图片描述
新用户可免费领取100条试用,3个月内有效

申请签名

在这里插入图片描述

申请短信模板

在这里插入图片描述

获取密钥

在这里插入图片描述
获取 AccessKey ID 和 AccessKey Serect

系统设置

在这里插入图片描述
在这里插入图片描述

发送短信

绑定测试手机号码,调用测试签名模板API

在这里插入图片描述
在这里插入图片描述

Alibaba Cloud Dysmsapi SDK for NodeJS

安装依赖包 dysmsapi

 % npm install --save @alicloud/dysmsapi20170525@2.0.24

added 21 packages, and audited 243 packages in 12s

15 packages are looking for funding
  run `npm fund` for details

11 vulnerabilities (2 low, 4 moderate, 5 high)

To address issues that do not require attention, run:
  npm audit fix

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.

建立一个 nodesms.js文件

import Dysmsapi20170525, { SendSmsRequest } from '@alicloud/dysmsapi20170525';// 导入 Dysmsapi
import { Config } from '@alicloud/openapi-client'// 导入 Dysmsapi Config
import { ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET } from '../utils/config.js'// AK & SK
import common from '../utils/common.js'// 生成随机六位数

// 使用AK&SK初始化账号Client
const config = new Config({
    accessKeyId: ALIBABA_CLOUD_ACCESS_KEY_ID, // AccessKey ID
    accessKeySecret: ALIBABA_CLOUD_ACCESS_KEY_SECRET, // AccessKey Secret
})

// Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
config.endpoint = `dysmsapi.aliyuncs.com`// Endpoint 规则为:[product_code].[regionid].aliyuncs.com
// 特化请求客户端
const dysmsapiClient = new Dysmsapi20170525.default(config)

//发送短信
export default (phoneNumber) => {

    const code = common.randomNum(6) //生成随机验证码
    //创建对应 API 的 Request
    const request = new SendSmsRequest({
        phoneNumbers: phoneNumber,// 接收短信的手机号码
        signName: '****',// 短信签名名称
        templateCode: '****',//短信模板Code
        // 短信模板变量对应的实际值
        templateParam: `{"code":"${code}"}`,
    })

    return new Promise((resolve, reject) => {

        // 通过 client 对象获得对应 request 响应 response 。
        dysmsapiClient.sendSms(request).then((res)=>{

            // {"bizId":"200503802978235232^0","code":"OK","message":"OK","requestId":"A3FCA6A0-8410-54B8-ABFA-35D17A27E212"}
            console.log('SendSms - ' + JSON.stringify(res.body))
            
            if(res.body.code === 'OK'){

                resolve ({state:0, message: "验证码发送成功", code})// state: 0, message: "查询成功", data: result
            }else {

                resolve ({state:100, message: "验证码发送失败,请稍后重试", data: res.body.message})
            }

        }).catch((error) => {

            console.log('SendSms - ' + error)// Error: MissingPhoneNumbers: code: 400, PhoneNumbers is mandatory for this action. request id: 89385666-E287-5E59-84DB-B8781FF778A5
            resolve ({state:100, message: "验证码发送失败,请稍后重试", data: error.message})

        })
       
    })
}

发送验证码的接口

// 发送验证码的接口
router.post('/phone', (req, res) => {

  // 定义校验规则 手机号
  const phoneSchema = Joi.object({ 

    phone: Joi.string()
        .pattern(/^1[3-9]\d{9}$/)
        .messages({'string.pattern.base': `请输入正确的手机号`}).required(), // 手机号
  })

  // 校验
  const { error } = phoneSchema.validate(req.body)// , value phone //刚刚从前台传过来的手机号
  // console.log(error)
  // 如果验证通过,就只会返回value属性,如果验证错误,就还有一个error对象,其中error对象的message描述了失败原因:
  if(error){
 
    return res.output(error)
  }

  //去数据库中找有没有同名的手机号,
  db.query('select * from AdminUser where phone=?', req.body.phone, (err, results) => {

    // 执行失败
    if (err) return res.output(err)

    // 执行成功,但手机号已经注册
    if(results && results.length > 0) return res.output('该手机号已经注册')
      
    // 发送验证码
    nodesms(req.body.phone).then(result => {

      // console.log('res - ' + result.state + ' -- ' + result.code)
      if(result.state === 0){

        codeInfo[req.body.phone] = { time: new Date().getTime(), code: result.code }

        res.output('发送成功', 0)

      }else{

        res.output(result.data)

      }
      

    })
    
            
  })

})

接口验证

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值