溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么在node中利用短信api實現(xiàn)一個驗證碼登錄功能

發(fā)布時間:2021-01-20 14:19:06 來源:億速云 閱讀:128 作者:Leah 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細講解有關(guān)怎么在node中利用短信api實現(xiàn)一個驗證碼登錄功能,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

1. node服務(wù)器搭建+數(shù)據(jù)庫的連接

此處操作比較簡潔易懂,可參考:node服務(wù)器快速搭建

2. 短信api的使用

對于短信api ,此處以 阿里云的短信服務(wù)為例(只要是有短信服務(wù)的平臺皆可使用)

2.1 登錄平臺進行參數(shù)配置

1. 進入短信控制臺,對要發(fā)送的短信格式進行配置,如果沒有簽名,需要申請簽名后操作

怎么在node中利用短信api實現(xiàn)一個驗證碼登錄功能

2. 點擊查看 API Demo 進入配置生成的api;此時選擇 Node.js

怎么在node中利用短信api實現(xiàn)一個驗證碼登錄功能

2.2 根據(jù)生成的api 在項目中使用

代碼注釋詳盡

const Core = require('@alicloud/pop-core'); //cwen 調(diào)用阿里短信模塊(需先安裝)
//cwen 對阿里短信服務(wù)API進行配置
let client = new Core({
 accessKeyId: '<accessKeyId>', // 需要先申請(步驟在下文)
 accessKeySecret: '<accessSecret>', // 需要先申請(步驟在下文)
 endpoint: 'https://dysmsapi.aliyuncs.com', //無需更改
 apiVersion: '2017-05-25' //無需更改
});
//cwen 請求方式
let requestOption = {
  method: 'POST'
};

//# 生成隨機四位數(shù),模擬驗證碼
function rander(max, min) {
  return Math.floor(Math.random() * (max - min)) + min
}
//# 存儲手機號+驗證碼(方便驗證)
var loginInfo = [];
//# 驗證手機號是否已經(jīng)發(fā)送個驗證碼
let validate = (phone) => {
  return loginInfo.some(item => item.phone === phone)
}
//# 驗證驗證碼是否一致
let validateCode = (phone, code) => {
  return loginInfo.some(item => (item.phone === phone && item.code == code))
}

//cwen 用阿里云api發(fā)送短信驗證(驗證碼登錄)
let sendLoginCroeCode = async(req, res) => {
  let { phone } = req.body;
  let randCode = rander(1000, 9999);
  var params = {
      "RegionId": "cn-hangzhou",
      "PhoneNumbers": phone, // 客戶端手機號
      "SignName": "小陳應(yīng)用ya", //簽名
      "TemplateCode": "SMS_197625305", //模板,用于發(fā)送文字信息
      "TemplateParam": JSON.stringify({ 'code': randCode }) //指定要發(fā)送的驗證碼(此處以rander 函數(shù)為例)
    }
     //# 發(fā)送驗證碼之前判斷手機號是否注冊過
  if (await isRegister(phone)) { // 此處為數(shù)據(jù)庫操作(可忽略)
    client.request('SendSms', params, requestOption).then((result) => {
      if (result.Code == 'OK') {
        res.send({
          status: 200,
          msg: '發(fā)送成功'
        });
        loginInfo.push({
          phone: phone,
          code: randCode
        });
        console.log(randCode)
      } else {
        res.send({
          status: 400,
          msg: '發(fā)送失敗'
        })
      }
    })
  } else {
    res.send({
      status: 400,
      msg: '該手機號未注冊'
    })
  }
}

//# 驗證碼登錄接口
let phoneCodeLogin = async(req, res) => {
  let { phone, code } = req.body;
  if (validate(phone)) { //判斷手機號是否發(fā)送過驗證碼
    if (validateCode(phone, code)) { // 判斷驗證碼與手機號是否匹配
      let user = await isFirstLogin(phone); // 此處為數(shù)據(jù)庫操作,獲取用戶信息(可忽略)
      res.send({
        status: 200,
        msg: '登錄成功',
        data: user[0]
      })
      loginInfo = []; // 登錄成功,立馬清空數(shù)組,以免無法再次發(fā)送驗證碼
    } else {
      res.send({
        status: 400,
        msg: '驗證碼錯誤'
      })
    }
  } else {
    res.send({
      status: 400,
      msg: '未獲取驗證碼'
    })
  }
}

// 注意:最后記得把接口暴露出去

注意accessKeyId、accessKeySecret 需要先申請再使用

怎么在node中利用短信api實現(xiàn)一個驗證碼登錄功能

3. 使用接口登錄

此處以Postman 接口調(diào)試工具為例,手機號為數(shù)據(jù)庫中注冊過的手機號

請求發(fā)送驗證碼

怎么在node中利用短信api實現(xiàn)一個驗證碼登錄功能

手機收到驗證碼

怎么在node中利用短信api實現(xiàn)一個驗證碼登錄功能

驗證碼登錄

怎么在node中利用短信api實現(xiàn)一個驗證碼登錄功能

關(guān)于怎么在node中利用短信api實現(xiàn)一個驗證碼登錄功能就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI