hi, 大家好, 我是徐小夕, 新的一年, 你又博学了吗?

今天和大家分享一下使用 nodejs 实现短信验证码登录的方案, 通过对该方案的实现大家可以可以对 nodejs 及其相关生态有一个更深入的理解.

好啦, 话不多说, 我们开始实现.

实现方案

为了更高效的开发 nodejs 应用, 这里我选择 nest.js 作为服务端框架, 同时使用腾讯云的短信服务:

具体实现流程如下:

详细流程如下:

  1. 用户访问网站登录页面, 输入手机号触发验证码

  2. node服务器收到请求后, 拼接所需参数(具体在下文会详细介绍), 请求第三方短信服务平台

  3. 第三方短信服务平台校验, 通过后下发对应短信

  4. 用户在网站输入收到的验证码, 请求登录接口完成登录

相信大家对第一步没有太大疑问, 接下来我详细介绍几个核心的实现过程.

1. 短信服务的配置流程

由于我使用的是腾讯云的短信服务, 所以需要按照约定来完成以下配置:

  • 创建短信签名

发送短信内容时必须带签名.

  • 创建短信模版

短信模版可以让我们创建自定义的短信内容, 还可以创建动态内容, 大家感兴趣可以研究一下.

  • 创建应用(一般使用默认即可)

2. nodejs服务器向短信服务平台发起短信调用

以上配置完成并审核通过之后, 我们就可以使用 nodejs 愉快的发送短信了. 这里我们需要安装腾讯云的sdk:

# nest项目中
npm install tencentcloud-sdk-nodejs --save

然后在 nest 服务端存储上一步获取的:

  • 用户手机号

  • SmsSdkAppId(应用id)

  • TemplateId(模版id)

  • SignName(签名内容)

  • TemplateParamSet(需要发送的验证码)

核心代码如下:

/*** 发送手机验证码* @param params 请求体*/async registerCode(params: any): Promise<any> {const { phone } = params;if (!phone) {return {code: 400,msg: '手机号为空',};}const code = `${rand(1000,9999)}`;phoneCodeList[phone] = code;const smsParams = {"PhoneNumberSet": [`+86${phone}`],"SmsSdkAppId": "xxxxx","TemplateId": "12*****","SignName": "dooring服务","TemplateParamSet": [code]};try {const result = await client.SendSms(smsParams);if(result?.SendStatusSet.Code === 'Ok') {return {code: 200,msg: 'Success',};}else {return {code: 500,msg: `Service error: ${result?.SendStatusSet.Message}`,};}}catch(err) {return {code: 500,msg: `Service error: ${err}`};}}

以上是用 nest 写的一个简单的 service 逻辑, 主要功能是发送用户手机号和签名参数到第三方短信平台, 下发短信. TemplateParamSet字段为一个数组, 数组长度取决于我们的短信模版中动态变量的配置, 如下:

如果我们配置的模版内容中有2个变量, 那么TemplateParamSet字段 的数组为2项.

3. nodejs实现短信验证码验证

最后一步比较简单. 我们只需要把用户填写的验证码和我们服务器生成的验证码进行比对即可, 我们可以使用 redis 来缓存验证码.

最终的实现效果如下:

当然大家可以用自己熟悉的任何 nodejs 框架来实现以上功能(如koa, egg).

更多推荐

  • 从零开发一套基于React的加载动画库

  • 从零开发一款轻量级滑动验证码插件

  • 如何用不到200行代码写一款属于自己的js框架

  • 从零设计可视化大屏搭建引擎

  • 从零使用electron搭建桌面端可视化编辑器Dooring

好啦, 今天的分享就到这啦, 如果文章对你有帮助, 欢迎 「点赞」 + 「在看」, 鼓励作者创造更优质的内容~

点个在看你最好看

nest.js + sms 实现短信验证码登录相关推荐

  1. 「实操」用node.js开发短信验证码登录的功能

    今天给大家操作如何给网站增加短信验证码登录功能,实际操作非常简单,对照文档15分钟就可以完成接入. 需要准备资料有:登录页面(html页面).短信接口参数.服务端 特别说明:因为闪速码接口支持个人.企 ...

  2. 手机短信验证码登录功能的开发实录(机器识别码、短信限流、错误提示、发送验证码倒计时60秒)

    短信验证码登录功能 项目分析 核心代码 1.外部js库调用 2.HTML容器构建 3.javaScript业务逻辑验证 4.后端验证逻辑 总结 短信验证码是通过发送验证码到手机的一种有效的验证码系统, ...

  3. 5.Spring Security 短信验证码登录

    Spring Security 短信验证码登录 在 Spring Security 添加图形验证码一节中,我们已经实现了基于 Spring Boot + Spring Security 的账号密码登录 ...

  4. java antd实现登录,基于 antd pro 的短信验证码登录

    概要 整体流程 前端 页面代码 请求验证码和登录的 service (src/services/login.js) 处理登录的 model (src/models/login.js) 后端 短信验证码 ...

  5. 腾讯云实现短信验证码登录

    腾讯云实现短信验证码登录 腾讯云配置 后端逻辑实现 腾讯云配置 首先在腾讯云搜索短信 然后按要求创建短信签名,短信模板.短信模板很容易审核,但是签名比较复杂,需要按要求填写和上传相关信息.如果驳回可以 ...

  6. SpringSecurity短信验证码登录

    短信验证码登录 时下另一种非常常见的网站登录方式为手机短信验证码登录,但Spring Security默认只提供了账号密码的登录认证逻辑,所以要实现手机短信验证码登录认证功能,我们需要模仿Spring ...

  7. Spring Security 短信验证码登录(5)

    在Spring Security添加图形验证码中,我们已经实现了基于Spring Boot + Spring Security的账号密码登录,并集成了图形验证码功能.时下另一种非常常见的网站登录方式为 ...

  8. go 实现发送短信验证码登录

    现在大多数app或wap都实现了通过手机号获取验证码进行验证登录,下面来看下用go来实现手机号发送短信验证码登录的过程,基于的框架是gin . 首先是短信服务商的申请,比如腾讯云.阿里云.网易易盾等, ...

  9. 【开发测试个人小微接入短信验证码】thinkphp5.1+小程序使用短信验证码登录

    最近写一个小项目需要用到短信验证码登录,本来打算用阿里云的短信,但是各种审核什么的太麻烦,偶然间发现一个对个人开发测试比较友好的短信平台,注册就送100条验证码,测试用妥妥的够用.而且个人认证处理速度 ...

最新文章

  1. 一次使用Eclipse Memory Analyzer分析weblogic内存溢出
  2. linux ---jenkins的安装与配置
  3. bash: /etc/apt/sources.list: 权限不够的解决办法
  4. spark-jar冲突解决方案
  5. 为什么 IEnumerable 没有提供 ForEach ?
  6. c语言中,char型数据是以什么形式存储的?
  7. untitled软件怎么用_苹果手机怎么用4G网络于App Store下载超过200MB以上的软件
  8. DNS高速缓存及DDNS
  9. WebView详解与简单实现Android与H5互调
  10. jQuery学习笔记——筛选元素集合
  11. php mysql中华图书购物商城
  12. 京瓷Kyocera TASKalfa 6002i 一体机驱动
  13. PCA降维-原理(一)
  14. Xunsearch体验Demo
  15. 2016预测哪些公司增值最猛?
  16. Unity初学者Shader Graph教程
  17. getchar()函数的使用方法
  18. 中国建设银行宣布:国内第一家无人银行,在上海正式开业!
  19. Android_使用Android killer破解apk
  20. 2017微信公开课·张小龙演讲全文(下)

热门文章

  1. mysql--navicat--运行SQL时提示出错信息-1055 - Expression #1 of ORDER BY clause is not in GROUP BYt
  2. Aspose.Word企业案例:Pesearch Engineers 使用 Aspose.Words for Java 查看和转换 Word 文档
  3. Word排版-表格跨页续表
  4. Mac mysql数据库基本操作
  5. Python-二分查找算法bisect模块
  6. 使用AHK为音量调节设置快捷键 | AutoHotKey
  7. 【数据库学习笔记】第三章 关系数据库标准语言
  8. JavaScript一瞥(1)
  9. Oracle ASMLib库资源收藏--Oracle官方下载链接
  10. Echarts横坐标鼠标点击事件