当前位置: 首页 > 科技观察

Nest.Js+Sms实现短信验证码登录

时间:2023-03-12 07:33:34 科技观察

大家好,我是许小希。新的一年,你又长知识了吗?今天给大家分享一下使用nodejs实现短信验证码登录的方案。通过本方案的实现,可以让大家对nodejs有更多的了解,对其相关生态也有更深入的了解。好了,废话不多说,下面开始实施吧。实现方案为了更高效的开发nodejs应用,这里我选择nest.js作为服务端框架,同时使用腾讯云的短信服务:具体实现过程如下:详细过程如下:用户访问网站登录页面,输入手机号触发验证码。节点服务器收到请求后,拼接需要的参数(下面会详细说明),向第三方短信服务平台请求第三方短信服务平台校验,校验通过后,发送对应的短信将发送给用户输入网站收到的验证码,请求登录界面完成登录。相信大家都对第一步没有疑惑。下面详细介绍几个核心的实现过程。1短信服务的配置流程由于我使用的是腾讯云的短信服务,根据协议需要完成以下配置:创建短信签名,发送带有签名的短信内容。创建SMS模板SMS模板允许我们创建自定义SMS内容,您还可以创建动态内容。如果你有兴趣,可以研究一下。创建应用(一般使用默认)2.nodejs服务器向短信服务平台发起短信调用。以上配置完成并通过后,我们就可以使用nodejs了。开心发短信。这里需要安装腾讯云的sdk:#npminstalltencentcloud-sdk-nodejs--save在nest项目中,然后在nestserver上存储上一步获取的信息:用户手机号SmsSdkAppId(applicationid)TemplateId(templateid)SignName(签名内容)TemplateParamSet(需要发送验证码)核心代码如下:/***发送手机验证码*@paramparamsrequestbody*/asyncregisterCode(params:any):Promise<任何>{const{电话}=参数;if(!phone){return{code:400,msg:'电话号码为空',};}constcode=`${rand(1000,9999)}`;phoneCodeList[phone]=代码;constsmsParams={"PhoneNumberSet":[`+86${phone}`],"SmsSdkAppId":"xxxxx","TemplateId":"12*****","SignName":"dooringservice","TemplateParamSet":[代码]};try{constresult=awaitclient.SendSms(smsParams);如果(结果?.SendStatusSet.Code==='Ok'){return{code:200,msg:'Success',};}else{return{code:500,msg:`Serviceerror:${result?.SendStatusSet.Message}`,};}}catch(err){return{code:500,msg:`Serviceerror:${err}`};}}以上是用nest写的一个简单的服务逻辑,主要功能是将用户的手机号和签名参数发送给第三方短信平台,并发送短信。TemplateParamSet字段是一个Array,数组的长度取决于我们短信模板中动态变量的配置,如下:如果我们配置的模板内容中有2个变量,那么TemplateParamSet字段的数组就是2项。简单的。我们只需要将用户填写的验证码与我们服务器生成的验证码进行比对即可。我们可以使用redis来缓存验证码。最终实现效果如下:当然,你可以使用任何你熟悉的nodejs框架来实现以上功能(比如koa,egg)。