node中短信api實(shí)現(xiàn)驗(yàn)證碼登錄的示例代碼
1. node服務(wù)器搭建+數(shù)據(jù)庫(kù)的連接
此處操作比較簡(jiǎn)潔易懂,可參考:node服務(wù)器快速搭建
2. 短信api的使用
對(duì)于短信api ,此處以 阿里云的短信服務(wù)為例(只要是有短信服務(wù)的平臺(tái)皆可使用)
2.1 登錄平臺(tái)進(jìn)行參數(shù)配置
1. 進(jìn)入短信控制臺(tái),對(duì)要發(fā)送的短信格式進(jìn)行配置,如果沒(méi)有簽名,需要申請(qǐng)簽名后操作
2. 點(diǎn)擊查看 API Demo 進(jìn)入配置生成的api;此時(shí)選擇 Node.js
2.2 根據(jù)生成的api 在項(xiàng)目中使用
代碼注釋詳盡
const Core = require('@alicloud/pop-core'); //cwen 調(diào)用阿里短信模塊(需先安裝) //cwen 對(duì)阿里短信服務(wù)API進(jìn)行配置 let client = new Core({ accessKeyId: '<accessKeyId>', // 需要先申請(qǐng)(步驟在下文) accessKeySecret: '<accessSecret>', // 需要先申請(qǐng)(步驟在下文) endpoint: 'https://dysmsapi.aliyuncs.com', //無(wú)需更改 apiVersion: '2017-05-25' //無(wú)需更改 }); //cwen 請(qǐng)求方式 let requestOption = { method: 'POST' }; //# 生成隨機(jī)四位數(shù),模擬驗(yàn)證碼 function rander(max, min) { return Math.floor(Math.random() * (max - min)) + min } //# 存儲(chǔ)手機(jī)號(hào)+驗(yàn)證碼(方便驗(yàn)證) var loginInfo = []; //# 驗(yàn)證手機(jī)號(hào)是否已經(jīng)發(fā)送個(gè)驗(yàn)證碼 let validate = (phone) => { return loginInfo.some(item => item.phone === phone) } //# 驗(yàn)證驗(yàn)證碼是否一致 let validateCode = (phone, code) => { return loginInfo.some(item => (item.phone === phone && item.code == code)) } //cwen 用阿里云api發(fā)送短信驗(yàn)證(驗(yàn)證碼登錄) let sendLoginCroeCode = async(req, res) => { let { phone } = req.body; let randCode = rander(1000, 9999); var params = { "RegionId": "cn-hangzhou", "PhoneNumbers": phone, // 客戶(hù)端手機(jī)號(hào) "SignName": "小陳應(yīng)用ya", //簽名 "TemplateCode": "SMS_197625305", //模板,用于發(fā)送文字信息 "TemplateParam": JSON.stringify({ 'code': randCode }) //指定要發(fā)送的驗(yàn)證碼(此處以rander 函數(shù)為例) } //# 發(fā)送驗(yàn)證碼之前判斷手機(jī)號(hào)是否注冊(cè)過(guò) if (await isRegister(phone)) { // 此處為數(shù)據(jù)庫(kù)操作(可忽略) 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: '該手機(jī)號(hào)未注冊(cè)' }) } } //# 驗(yàn)證碼登錄接口 let phoneCodeLogin = async(req, res) => { let { phone, code } = req.body; if (validate(phone)) { //判斷手機(jī)號(hào)是否發(fā)送過(guò)驗(yàn)證碼 if (validateCode(phone, code)) { // 判斷驗(yàn)證碼與手機(jī)號(hào)是否匹配 let user = await isFirstLogin(phone); // 此處為數(shù)據(jù)庫(kù)操作,獲取用戶(hù)信息(可忽略) res.send({ status: 200, msg: '登錄成功', data: user[0] }) loginInfo = []; // 登錄成功,立馬清空數(shù)組,以免無(wú)法再次發(fā)送驗(yàn)證碼 } else { res.send({ status: 400, msg: '驗(yàn)證碼錯(cuò)誤' }) } } else { res.send({ status: 400, msg: '未獲取驗(yàn)證碼' }) } } // 注意:最后記得把接口暴露出去
注意:accessKeyId、accessKeySecret
需要先申請(qǐng)?jiān)偈褂?/p>
3. 使用接口登錄
此處以Postman 接口調(diào)試工具為例,手機(jī)號(hào)為數(shù)據(jù)庫(kù)中注冊(cè)過(guò)的手機(jī)號(hào)
請(qǐng)求發(fā)送驗(yàn)證碼
手機(jī)收到驗(yàn)證碼
驗(yàn)證碼登錄
到此這篇關(guān)于node中短信api實(shí)現(xiàn)驗(yàn)證碼登錄的示例代碼的文章就介紹到這了,更多相關(guān)node 短信驗(yàn)證碼登錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
node.js 動(dòng)態(tài)執(zhí)行腳本
其中的Script對(duì)象,就與require('vm')返回的對(duì)象很相似,而實(shí)質(zhì)上,vm模塊就是對(duì)Script對(duì)象的封裝。2016-06-06webpack打包、編譯、熱更新Node內(nèi)存不足問(wèn)題解決
Webpack是現(xiàn)在主流的功能強(qiáng)大的模塊化打包工具,在使用Webpack時(shí),如果不注意性能優(yōu)化,有非常大的可能會(huì)產(chǎn)生性能問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于webpack打包、編譯、熱更新Node內(nèi)存不足問(wèn)題解決的相關(guān)資料,需要的朋友可以參考下2023-03-03nodejs構(gòu)建本地web測(cè)試服務(wù)器 如何解決訪(fǎng)問(wèn)靜態(tài)資源問(wèn)題
這篇文章主要為大家詳細(xì)介紹了nodejs構(gòu)建本地web測(cè)試服務(wù)器,教大家如何解決訪(fǎng)問(wèn)靜態(tài)資源問(wèn)題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07Node.js中Sequelize?hook的使用方法小結(jié)
Sequelize?提供了多個(gè)?hook,用于在執(zhí)行數(shù)據(jù)庫(kù)操作時(shí)執(zhí)行一些自定義邏輯,本文為大家整理了一些常用的?Sequelize?hook?列表及其作用,希望對(duì)大家有所幫助2024-02-02npm dose not support Node.js v10.15
這篇文章主要給大家介紹了關(guān)npm dose not support Node.js v10.15.3的解決方法,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-11-11node.js缺少mysql模塊運(yùn)行報(bào)錯(cuò)的解決方法
前幾天在工作中需要利用node.js連接數(shù)據(jù)庫(kù),通過(guò)網(wǎng)上的教程連接后運(yùn)行卻報(bào)錯(cuò)了,然后趕緊查找解決的方法,通過(guò)測(cè)試與朋友的提點(diǎn),終于解決了這個(gè)問(wèn)題,現(xiàn)在將解決的方法分享給大家,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。2016-11-11