首页 > 编程语言 >nodejs+阿里云实现发送短信验证码

nodejs+阿里云实现发送短信验证码

时间:2024-08-12 10:22:51浏览次数:8  
标签:code 短信 nodejs 验证码 captchaObj phone let return before

一、阿里云短信服务

打开阿里云短信服务控制台

1.新增资质

2.新增模板与签名

3.等待审核通过

二、node代码

1.首先需要下载依赖

npm i @alicloud/pop-core --save

2.引入依赖

关键信息建议放环境变量中

 accessKeyId和accessKeySecret在这里↓

 以下是代码

const Core = require('@alicloud/pop-core');
const Captcha = require("../common/Captcha")
const capt = Captcha()

let client = new Core({
    accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
    accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
    endpoint: 'https://dysmsapi.aliyuncs.com',
    apiVersion: '2017-05-25'
});
let requestOption = {
    method: 'POST',
    formatParams: false,
};

3.验证代码的实现

function Captcha() {
    let captchaObj = {}
    let status = {over: 0, success: 1, error: 2}
    let setCode = (phone, code) => {
        let time = Date.now()
        if (captchaObj[phone] && captchaObj[phone].time && !isExceed60Seconds(captchaObj[phone].time, time)) {
            return false
        } else {
            captchaObj[phone] = {code, time}
            return true
        }
    }
    //是否正确且不超时
    let checkCode = (phone, code) => {
        let time = Date.now()
        let before = captchaObj[phone].time
        let isOver = isTimeDifferenceGreaterThanFiveMinutes(before, time)
        if (isOver) {
            return status.over
        } else {
            return checkIfDif(captchaObj[phone], code)
        }
    }
    
    function checkIfDif(before, cur) {
        // console.log(before, cur)
        if (before && before.code === cur) {
            return status.success
        } else {
            return status.error
        }
    }

    const getCode = (phone) => {
        return captchaObj[phone]?.code
    }

    function isTimeDifferenceGreaterThanFiveMinutes(before, cur) {
        // 计算时间差(单位:毫秒)
        let difference = Math.abs(cur - before);  // 使用Math.abs确保时间差始终为正数

        // 将毫秒转换为分钟
        let differenceInMinutes = difference / (1000 * 60);

        // 判断时间差是否大于五分钟
        return differenceInMinutes > 5;
    }

    function isExceed60Seconds(before, cur) {
        // 计算时间差,单位为毫秒
        let diff = cur - before;

        // 将毫秒转换为秒
        let secondsDiff = diff / 1000;

        // 判断是否超过60秒
        return secondsDiff > 60;
    }

    return {setCode, checkCode, getCode}
}

module.exports = Captcha

4.在接口中使用

router.post("/sendCode", (req, res) => {
    const {tel_number} = req.body
    let code = methods.generateFourDigitRandom()
    let setResult = capt.setCode(tel_number, code)
    if (setResult) {
        let params = {
            "SignName": process.env['ALIBABA_CLOUD_SIGN_NAME'],//资质名称
            "TemplateCode": process.env['ALIBABA_CLOUD_TMP_CODE'],//模板CODE
            "PhoneNumbers": tel_number,
            "TemplateParam": JSON.stringify(({code: code}))
        }
        client.request('SendSms', params, requestOption).then((result) => {
            res.send(Result.success({msg: "成功!", data: result}))
        }, (ex) => {
            res.send(Result.fail({errmsg: "请求失败!", error: ex}))
        })
    } else {
        res.send(Result.validateFailed({errmsg: "发送太过频繁,请稍后再试!"}))
    }
})

标签:code,短信,nodejs,验证码,captchaObj,phone,let,return,before
From: https://blog.csdn.net/xswl233333/article/details/141123953

相关文章

  • 基于nodejs+vue紧急自救知识教学与交流平台[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着自然灾害与突发事件的频发,提高公众的紧急自救能力已成为社会关注的焦点。在数字化时代,虽然信息获取渠道多样,但针对紧急自救知识的普及与教学质量参差不......
  • 基于nodejs+vue进口零食销售网站[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码毕设程序文件开题报告内容研究背景随着互联网技术的飞速发展和全球贸易的日益紧密,跨境电商已成为连接消费者与世界各地优质商品的重要桥梁。近年来,进口零食以其独特的口味、新颖的包装和丰富的品......
  • 基于nodejs+vue酒店管理系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展和消费者对于住宿体验要求的不断提升,酒店业面临着前所未有的挑战。传统的酒店管理模式在应对客户多样化需求、提升服务效率及优化资源......
  • 哪里有短信接码平台
    短信接码涉及到验证码的获取和使用,‌这通常与账号注册、‌验证或换绑手机号等操作相关。‌然而,‌需要注意的是,‌非法获取或使用短信验证码进行账号注册或其他行为可能构成侵犯公民个人信息的违法犯罪行为,‌因此必须谨慎对待。‌关于短信接码,‌这里有一些合法和合规的建议:‌1......
  • 基于nodejs+vue酒店预定管理系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展,酒店业竞争日益激烈,如何高效管理酒店预定流程,提升客户体验,成为酒店管理者关注的焦点。传统的酒店预定方式往往存在信息不对称、预订流......
  • 基于nodejs+vue酒店在线管理系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网的普及和移动技术的飞速发展,传统酒店行业正经历着前所未有的变革。酒店顾客对于便捷、高效、个性化的服务需求日益增长,而传统的酒店管理模式已难......
  • 基于nodejs+vue酒店综合服务[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景在旅游与酒店行业日益融合的今天,酒店已不仅仅是提供住宿的场所,而是成为了集住宿、餐饮、休闲、购物等多种服务于一体的综合服务平台。随着消费者对旅行体验......
  • 基于nodejs+vue咖啡销售平台[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网的飞速发展和电子商务的普及,线上购物已成为消费者日常生活中不可或缺的一部分。咖啡,作为一种广受欢迎的饮品,其市场需求持续增长,特别是在年轻一代......
  • 店铺点评_1_短信登录功能
    1短信登录1.1导入点评项目框架1.当前模型简述手机/app端发起请求,请求nginx服务器。(nginx基于七层模型走HTTP协议,可以实现基于Lua直接绕开tomcat访问redis;也可以作为静态资源服务器,实现上万并发,负责均衡到下游tomcat服务器,打散流量。一台4核8G的tomcat,在优化和处理简单业务......
  • nagios 飞信(fetion) 短信报警
    nagios飞信(fetion)短信报警张映发表于2012-04-25分类目录:服务器相关前面提到nagios用邮件来发邮件报警,如果能将报警信息发到手机上来不是更好。其实手机上也可以使用邮箱的。邮箱和手机绑定一下就行了。下面说一下,centos6.064位的系统下,用飞信来发报警信息。一,安装所要......