日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

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

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

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

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

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

nest.js + sms 實(shí)現(xiàn)短信驗(yàn)證碼登錄

 

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

nest.js + sms 實(shí)現(xiàn)短信驗(yàn)證碼登錄

 

詳細(xì)流程如下:

  1. 用戶訪問(wèn)網(wǎng)站登錄頁(yè)面, 輸入手機(jī)號(hào)觸發(fā)驗(yàn)證碼
  2. node服務(wù)器收到請(qǐng)求后, 拼接所需參數(shù)(具體在下文會(huì)詳細(xì)介紹), 請(qǐng)求第三方短信服務(wù)平臺(tái)
  3. 第三方短信服務(wù)平臺(tái)校驗(yàn), 通過(guò)后下發(fā)對(duì)應(yīng)短信
  4. 用戶在網(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)建短信簽名
nest.js + sms 實(shí)現(xiàn)短信驗(yàn)證碼登錄

 

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

  • 創(chuàng)建短信模版
nest.js + sms 實(shí)現(xiàn)短信驗(yàn)證碼登錄

 

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

  • 創(chuàng)建應(yīng)用(一般使用默認(rèn)即可)
nest.js + sms 實(shí)現(xiàn)短信驗(yà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ǔ)上一步獲取的:

  • 用戶手機(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 寫的一個(gè)簡(jiǎn)單的 service 邏輯, 主要功能是發(fā)送用戶手機(jī)號(hào)和簽名參數(shù)到第三方短信平臺(tái), 下發(fā)短信. TemplateParamSet字段為一個(gè)數(shù)組, 數(shù)組長(zhǎng)度取決于我們的短信模版中動(dòng)態(tài)變量的配置, 如下:

nest.js + sms 實(shí)現(xiàn)短信驗(yàn)證碼登錄

 

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

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

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

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

nest.js + sms 實(shí)現(xiàn)短信驗(yàn)證碼登錄

 

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

分享到:
標(biāo)簽:驗(yàn)證碼
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定