偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Nest.Js + Sms 實(shí)現(xiàn)短信驗(yàn)證碼登錄

開(kāi)發(fā) 前端
今天和大家分享一下使用 nodejs 實(shí)現(xiàn)短信驗(yàn)證碼登錄的方案, 通過(guò)對(duì)該方案的實(shí)現(xiàn)大家可以可以對(duì) nodejs 及其相關(guān)生態(tài)有一個(gè)更深入的理解.

hi, 大家好, 我是徐小夕, 新的一年, 你又博學(xué)了嗎?

今天和大家分享一下使用 nodejs 實(shí)現(xiàn)短信驗(yàn)證碼登錄的方案, 通過(guò)對(duì)該方案的實(shí)現(xiàn)大家可以可以對(duì) nodejs 及其相關(guān)生態(tài)有一個(gè)更深入的理解.

好啦, 話(huà)不多說(shuō), 我們開(kāi)始實(shí)現(xiàn).

實(shí)現(xiàn)方案

為了更高效的開(kāi)發(fā) nodejs 應(yīng)用, 這里我選擇 nest.js 作為服務(wù)端框架, 同時(shí)使用騰訊云的短信服務(wù):

具體實(shí)現(xiàn)流程如下:

詳細(xì)流程如下:

  • 用戶(hù)訪(fǎng)問(wèn)網(wǎng)站登錄頁(yè)面, 輸入手機(jī)號(hào)觸發(fā)驗(yàn)證碼
  • node服務(wù)器收到請(qǐng)求后, 拼接所需參數(shù)(具體在下文會(huì)詳細(xì)介紹), 請(qǐng)求第三方短信服務(wù)平臺(tái)
  • 第三方短信服務(wù)平臺(tái)校驗(yàn), 通過(guò)后下發(fā)對(duì)應(yīng)短信
  • 用戶(hù)在網(wǎng)站輸入收到的驗(yàn)證碼, 請(qǐng)求登錄接口完成登錄

相信大家對(duì)第一步?jīng)]有太大疑問(wèn), 接下來(lái)我詳細(xì)介紹幾個(gè)核心的實(shí)現(xiàn)過(guò)程.

1. 短信服務(wù)的配置流程

由于我使用的是騰訊云的短信服務(wù), 所以需要按照約定來(lái)完成以下配置:

  • 創(chuàng)建短信簽名

發(fā)送短信內(nèi)容時(shí)必須帶簽名.

  • 創(chuàng)建短信模版

短信模版可以讓我們創(chuàng)建自定義的短信內(nèi)容, 還可以創(chuàng)建動(dòng)態(tài)內(nèi)容, 大家感興趣可以研究一下.

  • 創(chuàng)建應(yīng)用(一般使用默認(rèn)即可)

2. nodejs服務(wù)器向短信服務(wù)平臺(tái)發(fā)起短信調(diào)用

以上配置完成并審核通過(guò)之后, 我們就可以使用 nodejs 愉快的發(fā)送短信了. 這里我們需要安裝騰訊云的sdk:

# nest項(xiàng)目中
npm install tencentcloud-sdk-nodejs --save

然后在 nest 服務(wù)端存儲(chǔ)上一步獲取的:

  • 用戶(hù)手機(jī)號(hào)
  • SmsSdkAppId(應(yīng)用id)
  • TemplateId(模版id)
  • SignName(簽名內(nèi)容)
  • TemplateParamSet(需要發(fā)送的驗(yàn)證碼)

核心代碼如下:

/**
* 發(fā)送手機(jī)驗(yàn)證碼
* @param params 請(qǐng)求體
*/
async registerCode(params: any): Promise<any> {
const { phone } = params;
if (!phone) {
return {
code: 400,
msg: '手機(jī)號(hào)為空',
};
}

const code = `${rand(1000,9999)}`;
phoneCodeList[phone] = code;

const smsParams = {
"PhoneNumberSet": [
`+86${phone}`
],
"SmsSdkAppId": "xxxxx",
"TemplateId": "12*****",
"SignName": "dooring服務(wù)",
"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 寫(xiě)的一個(gè)簡(jiǎn)單的 service 邏輯, 主要功能是發(fā)送用戶(hù)手機(jī)號(hào)和簽名參數(shù)到第三方短信平臺(tái), 下發(fā)短信.TemplateParamSet字段為一個(gè)數(shù)組, 數(shù)組長(zhǎng)度取決于我們的短信模版中動(dòng)態(tài)變量的配置, 如下:

如果我們配置的模版內(nèi)容中有2個(gè)變量, 那么TemplateParamSet字段 的數(shù)組為2項(xiàng).

3. nodejs實(shí)現(xiàn)短信驗(yàn)證碼驗(yàn)證

最后一步比較簡(jiǎn)單. 我們只需要把用戶(hù)填寫(xiě)的驗(yàn)證碼和我們服務(wù)器生成的驗(yàn)證碼進(jìn)行比對(duì)即可, 我們可以使用 redis 來(lái)緩存驗(yàn)證碼.

最終的實(shí)現(xiàn)效果如下:

當(dāng)然大家可以用自己熟悉的任何 nodejs框架來(lái)實(shí)現(xiàn)以上功能(如koa, egg).


責(zé)任編輯:武曉燕 來(lái)源: 趣談前端
相關(guān)推薦

2022-07-20 09:52:44

Go語(yǔ)言短信驗(yàn)證碼

2021-06-18 06:48:54

前端Nest.js技術(shù)熱點(diǎn)

2021-01-19 10:29:34

短信驗(yàn)證碼密碼

2022-03-18 21:51:10

Nest.jsAOP 架構(gòu)后端

2016-11-14 15:40:01

Android

2022-01-20 10:54:23

移動(dòng)手機(jī)短信驗(yàn)證碼隱患

2021-12-22 06:56:06

MySQCrudjs

2025-04-01 00:44:04

2016-10-09 13:33:12

2015-03-23 18:03:36

短信驗(yàn)證碼正則自動(dòng)填寫(xiě)

2015-09-21 15:31:05

php實(shí)現(xiàn)驗(yàn)證碼

2021-07-22 10:25:07

JS驗(yàn)證碼前端

2021-12-27 20:29:21

機(jī)制PipeExceptionFi

2024-10-08 09:57:59

2021-08-02 12:29:15

Python爬蟲(chóng)網(wǎng)站

2020-07-30 09:34:10

安全信息安全Web

2025-04-22 09:23:37

2018-08-08 09:47:29

短信驗(yàn)證碼APP

2009-12-16 15:46:41

Ruby on rai
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)