您当前的位置:首页 > 电脑百科 > 程序开发 > 前端

nest.js + sms 实现短信验证码登录

时间:2022-02-05 12:48:09  来源:  作者:趣谈前端

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

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

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

实现方案

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

nest.js + sms 实现短信验证码登录

 

具体实现流程如下:

nest.js + sms 实现短信验证码登录

 

详细流程如下:

  1. 用户访问网站登录页面, 输入手机号触发验证码
  2. node服务器收到请求后, 拼接所需参数(具体在下文会详细介绍), 请求第三方短信服务平台
  3. 第三方短信服务平台校验, 通过后下发对应短信
  4. 用户在网站输入收到的验证码, 请求登录接口完成登录

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

1. 短信服务的配置流程

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

  • 创建短信签名
nest.js + sms 实现短信验证码登录

 

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

  • 创建短信模版
nest.js + sms 实现短信验证码登录

 

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

  • 创建应用(一般使用默认即可)
nest.js + sms 实现短信验证码登录

 

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字段为一个数组, 数组长度取决于我们的短信模版中动态变量的配置, 如下:

nest.js + sms 实现短信验证码登录

 

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

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

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

最终的实现效果如下:

nest.js + sms 实现短信验证码登录

 

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



Tags:验证码   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
hi, 大家好, 我是徐小夕, 新的一年, 你又博学了吗?今天和大家分享一下使用 nodejs 实现短信验证码登录的方案, 通过对该方案的实现大家可以可以对 nodejs 及其相关生态有一...【详细内容】
2022-02-05  Tags: 验证码  点击:(15)  评论:(0)  加入收藏
如今的微信不单单是一款社交软件,随着网络技术的更新迭代,微信的各项功能也在不断地更新升级,就比如微信绑定银行卡,原来需要手动输入银行卡号,长长的一串数字,对于年轻人来说还好...【详细内容】
2021-09-16  Tags: 验证码  点击:(82)  评论:(0)  加入收藏
手机的高度普及,互联网的快速发展,各种网站、移动app等都会用到短信验证码。目前市场上短信验证码提供商大大小小有很多,很多人在选择短信验证码提供商时都有些迷茫,不知哪家好,...【详细内容】
2021-07-14  Tags: 验证码  点击:(117)  评论:(0)  加入收藏
老规矩先看效果图普通短信 验证码短信 今天被云开发官方告知,云开发支持发短信功能了,然后就迫不及待地来尝下鲜。进入官方文档一看,云开发给咱们开发者的福利还真不小。 不仅...【详细内容】
2021-01-11  Tags: 验证码  点击:(158)  评论:(0)  加入收藏
在非本人操作情况下,手机短时间内收到很多来源不明的验证码或金融通知类的短信数百条,那可能是遭受了“短信轰炸”!近日,泰州市医药高新区人民法院审理了一起出售短信轰炸软件案...【详细内容】
2020-12-25  Tags: 验证码  点击:(198)  评论:(0)  加入收藏
本篇文章介绍了爬虫中验证码的处理方式, 并把这些功能封装起来,供我们使用, 涉及到百度AIP的调用方式, 以及一个最新的开源库muggle识别库的使用,欢迎阅读,点赞,收藏! 目录: 学会调用...【详细内容】
2020-10-29  Tags: 验证码  点击:(130)  评论:(0)  加入收藏
图形验证码是最经典,也是最常用的验证方式。今天介绍一个非常不错的类库:Java图形验证码,支持gif、中文、算术等类型,可用于Java Web、JavaSE等项目。官网:https://gitee.com/whv...【详细内容】
2020-09-29  Tags: 验证码  点击:(54)  评论:(0)  加入收藏
开头语: 除非是很简单的参数能够解决滑块问题或者追求效率的业务,否则的话,我还是会selenium来解决,并且接下来的验证码模式的话不需要使用到原图进行比较!!我发现很多网站都是基...【详细内容】
2020-09-25  Tags: 验证码  点击:(188)  评论:(0)  加入收藏
嗯,工具类记录原链接:https://blog.csdn.net/qq_37651267/article/details/99305573,非常感谢原链接博主 此验证码的实现没有用到太多的插件,话不多说直接上代码,大家拿过去就...【详细内容】
2020-09-02  Tags: 验证码  点击:(67)  评论:(0)  加入收藏
我们在网站登录界面,为了安全起见,除了填写用户名和密码之外,还会要求用户输入验证码才能进行登录,验证码的作用最主要的是验证输入方是一个在电脑前正在输入的人,而不是某些程序...【详细内容】
2020-08-28  Tags: 验证码  点击:(225)  评论:(0)  加入收藏
▌简易百科推荐
简介Hammer 是一个精简且功能强大的手势库,它不但支持移动端的手势,对于PC端的鼠标操作也能实别 目前github的star量22.8K官网地址:http://hammerjs.github.io/github地址:http...【详细内容】
2022-02-08  前端亦可行    Tags:Hammer.JS   点击:(7)  评论:(0)  加入收藏
hi, 大家好, 我是徐小夕, 新的一年, 你又博学了吗?今天和大家分享一下使用 nodejs 实现短信验证码登录的方案, 通过对该方案的实现大家可以可以对 nodejs 及其相关生态有一...【详细内容】
2022-02-05  趣谈前端    Tags:验证码   点击:(15)  评论:(0)  加入收藏
几乎在所有面向用户或企业的应用程序中,所呈现出来的信息都不是一成不变的,即数据都是动态的,由某个或者多个后台服务所提供。那么就不可避免地会涉及到网络请求,而对于不同企...【详细内容】
2022-01-29  Nodejs开发    Tags:前端   点击:(18)  评论:(0)  加入收藏
开源版 Nginx 最为人诟病的就是不具备动态配置、远程 API 及集群管理的能力,而 APISIX 作为 CNCF 毕业的开源七层网关,基于 etcd、Lua 实现了对 Nginx 集群的动态管理。让 Ngi...【详细内容】
2022-01-14  AT小白在线中    Tags:Nginx集群   点击:(25)  评论:(0)  加入收藏
我发现前端开发比后端开发困难得多。一般来说,在后端开发中,我知道我在做什么以及所有东西应该如何交互,代码是否能正常运行。但是,当涉及到前端时,整个故事就不一样了。这会是无...【详细内容】
2022-01-10  铁匠哥哥    Tags:前端技能   点击:(35)  评论:(0)  加入收藏
相信每一个前端在对接 API 时,多多少少一定遇过以下错误: 虽然要解决此问题大部分还是需要后端帮忙,但前端也需要知道为什么会发生、要如何解决。同源政策 (Same Origin Policy...【详细内容】
2021-12-24  前端小智    Tags:同源政策   点击:(33)  评论:(0)  加入收藏
一般的docker镜像为了节省空间,通常是没有安装systemd或者sysvint这类初始化系统的进程。一旦容器的起始进程不稳定将会产生大量的僵尸进程,影响宿主系统的运行。 缺少init的...【详细内容】
2021-12-23  mj谈云技术    Tags:容器   点击:(36)  评论:(0)  加入收藏
作者:maomincoding 来源:前端历劫之路 前言说起文档,我们可能会第一时间会想起很多技术文档,比如Vue.js文档、React.js文档、TypeScript文档,它们都有相似的布局和样式。那么,作为...【详细内容】
2021-12-23  Nodejs开发    Tags:文档   点击:(37)  评论:(0)  加入收藏
作者:damyxu,腾讯 PCG 前端开发工程师iframe是一个天然的微前端方案,但受限于跨域的严格限制而无法很好的应用,本文介绍一种基于 iframe 的全新微前端方案,继承iframe的优点,补足...【详细内容】
2021-12-16  damyxu  腾讯技术工程  Tags:前端   点击:(48)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条