最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

nodejs實(shí)現(xiàn)發(fā)送郵箱驗(yàn)證碼功能

 更新時(shí)間:2022年04月26日 16:54:13   作者:YmwWow  
這篇文章主要為大家詳細(xì)介紹了nodejs實(shí)現(xiàn)發(fā)送郵箱驗(yàn)證碼功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了nodejs實(shí)現(xiàn)發(fā)送郵箱驗(yàn)證碼的具體代碼,供大家參考,具體內(nèi)容如下

今天做了個(gè)小demo,是用nodejs實(shí)現(xiàn)注冊(cè)時(shí)(當(dāng)然在別的地方也是可以用的)的郵箱驗(yàn)證功能,大體就是往指定的郵箱發(fā)送六位驗(yàn)證碼。以下是詳細(xì)步驟。

1、使用模塊:nodemailer

安裝:npm install nodemailer --save

2、首先是來寫一下前臺(tái)注冊(cè)界面,不說了,先上圖。(不想看這一段的話直接跳到最后看郵箱驗(yàn)證碼的實(shí)現(xiàn))

然后實(shí)現(xiàn)以下以下效果(看圖先),就是點(diǎn)擊發(fā)送驗(yàn)證碼時(shí)出現(xiàn)一分鐘后再試的倒計(jì)時(shí)。

那現(xiàn)在先上代碼先

(1)form表單

<form role="form" action="doRegister" method="post" class="login-form">
? ?<div class="form-group">
? ? ? <label class="sr-only" for="form-username">Username</label>
? ? ? ?<input type="text" name="username" placeholder="請(qǐng)輸入賬號(hào)..." ?class="form-username form-control" id="form-username">
? ? </div>
? ? <div class="form-group">
? ? ? ?<label class="sr-only" for="form-password">Password</label>
? ? ? ?<input type="password" name="password" placeholder="請(qǐng)輸入密碼..." ?class="form-password form-control" id="form-password">
? ? </div>
? ? <div class="form-group">
? ? ? ?<label class="sr-only" for="form-password">Email</label>
? ? ? ?<input type="text" name="email" placeholder="請(qǐng)輸入郵箱..." class="form-password form-control" id="email"><br>
? ? ? ?<input type="button" ?onclick="abc()" class="btn btn-danger" id="emialcore" value="發(fā)送驗(yàn)證碼">
? ? ? ?<input type="text" name="code" placeholder="請(qǐng)輸入驗(yàn)證碼..." id="code">
? ? </div>
? ? <input type="submit" class="btn">
</form>

(2)倒計(jì)時(shí)函數(shù)

<script>
? ? ? function abc() {
? ? ? ? ? ? ? ? var time = 60;//定義60秒的倒計(jì)時(shí)
? ? ? ? ? ? ? ? var email = $('#email').val();//獲取輸入框的郵箱
? ? ? ? ? ? ? ? var user_name = $('#form-username').val();//獲取輸入的賬戶名
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? //這里我用的是ajax將用戶名和郵箱發(fā)到后臺(tái)
? ? ? ? ? ? ? ? $.get('/api/email',
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? email:email,
? ? ? ? ? ? ? ? ? ? ? ? user_name:user_name
? ? ? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? ? function (data) {
? ? ? ? ? ? ? ? ? ? ? ? console.log(data)
? ? ??
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? )
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? //設(shè)置一個(gè)定時(shí),一秒執(zhí)行一次
? ? ? ? ? ? ? ? var mytime = setInterval(function () {
? ? ? ? ? ? ? ? ? ? subs();
? ? ? ? ? ? ? ? },1000)
?
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? function subs(){
? ? ? ? ? ? ? ? ? ? time--;
? ? ? ? ? ? ? ? ? ? $('#emialcore').attr("value","請(qǐng)"+time+"秒后再試");
? ? ? ? ? ? ? ? ? ? if(time===0){
? ? ? ? ? ? ? ? ? ? ? ? clearInterval(mytime);
? ? ? ? ? ? ? ? ? ? ? ? $('#emialcore').attr("value","發(fā)送驗(yàn)證碼");
? ? ? ? ? ? ? ? ? ? ? ? $('#emialcore').attr("disabled",false);//按鍵可用
? ? ? ? ? ? ? ? ? ? } else{
? ? ? ? ? ? ? ? ? ? ? ? $('#emialcore').attr("disabled",true);//按鍵不可用
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? ?
? ? ? ? ? ? }
</script>

現(xiàn)在前臺(tái)的注冊(cè)頁面就可以用了。

(2)發(fā)送郵箱

第一步:前往郵箱設(shè)置,以163郵箱為例,開啟POP3/SMTP/IMAP,若不會(huì),自行百度

第二步:新建一個(gè)nodemailer.js文件寫發(fā)送郵件的配置信息,上代碼

//nodemailer.js
const nodemailer = require('nodemailer');
?
//創(chuàng)建一個(gè)smtp服務(wù)器
const config = {
? ? host: 'smtp.163.com',
? ? port: 465,
? ? auth: {
? ? ? ? user: '這里寫你自己的163郵箱@163.com', //注冊(cè)的163郵箱賬號(hào)
? ? ? ? pass: 'xxxxxxx' //郵箱的授權(quán)碼,不是注冊(cè)時(shí)的密碼,等你開啟的stmp服務(wù)自然就會(huì)知道了
? ? }
};
// 創(chuàng)建一個(gè)SMTP客戶端對(duì)象
const transporter = nodemailer.createTransport(config);
?
//發(fā)送郵件
module.exports = function (mail){
? ? transporter.sendMail(mail, function(error, info){
? ? ? ? if(error) {
? ? ? ? ? ? return console.log(error);
? ? ? ? }
? ? ? ? console.log('mail sent:', info.response);
? ? });
};

第三步:發(fā)送驗(yàn)證碼

router.get('/email',async (ctx)=>{
?
? ? var email = ctx.query.email;//剛剛從前臺(tái)傳過來的郵箱
? ? var user_name = ctx.query.user_name;//剛剛從前臺(tái)傳過來用戶名
? ? var code = await tools.createSixNum();//這里是我寫的生成的隨機(jī)六位數(shù),等等下面給代碼
? ? var date = new Date();//獲取當(dāng)前時(shí)間
? ? var isLive = "no";
? ? //去數(shù)據(jù)庫中找有沒有同名的用戶名,這里就要自己寫了,不同的數(shù)據(jù)庫查詢方法不同
? ? var result =await DB.find('user',{user_name:user_name});
?
? ? //console.log(result);
?
? ? if(result.length>0){
? ? ? ? ctx.body ={success:false,message:"賬號(hào)已經(jīng)存在"}
? ? }else{
? ? ? ? ctx.body ={success:true,message:"賬號(hào)可行"};//數(shù)據(jù)傳回前臺(tái)
? ? ? ? var mail = {
? ? ? ? ? ? // 發(fā)件人
? ? ? ? ? ? from: '<你自己的163郵箱@163.com>',
? ? ? ? ? ? // 主題
? ? ? ? ? ? subject: '接受憑證',//郵箱主題
? ? ? ? ? ? // 收件人
? ? ? ? ? ? to:email,//前臺(tái)傳過來的郵箱
? ? ? ? ? ? // 郵件內(nèi)容,HTML格式
? ? ? ? ? ? text: '用'+code+'作為你的驗(yàn)證碼'//發(fā)送驗(yàn)證碼
? ? ? ? };
?
? ? ? ? var json = {user_name,email,code,date,isLive};
? ? ? ? await DB.insert('user',json);//將獲取到的驗(yàn)證碼存進(jìn)數(shù)據(jù)庫,待會(huì)提交時(shí)要檢查是不是一致
? ? ? ? await nodemail(mail);//發(fā)送郵件
? ? }
})

因?yàn)榘l(fā)的是六位數(shù)字的驗(yàn)證碼,這里我寫了一個(gè)隨機(jī)生成六位隨機(jī)數(shù)的函數(shù):

createSixNum(){
? ? ? ? var Num="";
? ? ? ? for(var i=0;i<6;i++)
? ? ? ? {
? ? ? ? ? ? Num+=Math.floor(Math.random()*10);
? ? ? ? }
? ? ? ? return Num;
? ?}

接下來就可以正常發(fā)送了,見下圖

發(fā)送完了驗(yàn)證碼,輸入完驗(yàn)證碼還要驗(yàn)證一下是否真確

router.post('/doRegister',async (ctx)=>{?
?
? ? //console.log(ctx.request.body);
?
? ? var username = ctx.request.body.username;//獲取用戶名
? ? var password = ctx.request.body.password;//獲取密碼
? ? var code = ctx.request.body.code;//獲取你輸入的驗(yàn)證碼
? ??
? ? //去數(shù)據(jù)庫把剛剛在存驗(yàn)證碼的時(shí)候一起存的那條記錄找出來
? ? var result =await DB.find('user',{"user_name":username});
?
? ? var nowDate = (new Date()).getTime();//獲取當(dāng)前時(shí)間
?
? ? 判斷驗(yàn)證碼是否正確,時(shí)間是否超過10分鐘
? ? if(result[0].code===code && (result[0].date.getTime()) - nowDate <600000){
? ? ? ? //更新數(shù)據(jù)庫的用戶信息,把用戶密碼深的也存進(jìn)去
? ? ? ? await DB.update('user',{user_name:username},{
? ? ? ? ? ? "password":password,
? ? ? ? ? ? "status":1,
? ? ? ? ? ? "isLive":"yes",//注冊(cè)成功啦
? ? ? ? ? ? "add_time":tools.getTime()
? ? ? ? });
? ? ? ??
? ? }else{
? ? ? ? ctx.render('admin/error',{
? ? ? ? ? ? //驗(yàn)證碼過期或者是驗(yàn)證碼錯(cuò)誤,要寫點(diǎn)什么的話自己再去寫寫吧。
? ? ? ? })
?
? ? }
?
});

期間你會(huì)遇到很多錯(cuò)誤,不過都是有代碼的,主義自己debug一下,看什么錯(cuò)誤,然后查看163的返回錯(cuò)誤代碼文件或者是自行百度。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Node.js?應(yīng)用高?CPU?占用率分析方法

    詳解Node.js?應(yīng)用高?CPU?占用率分析方法

    這篇文章主要為大家介紹了Node.js?應(yīng)用高?CPU?占用率分析方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 解決node.js安裝包失敗的幾種方法

    解決node.js安裝包失敗的幾種方法

    nodejs安裝包失敗的原因可能有很多,下面這篇文章給大家整理三種方法來解決,大家可以試一試或許可以解決你的問題,下面來一起看一看。
    2016-09-09
  • Node.js+Express+Mysql 實(shí)現(xiàn)增刪改查

    Node.js+Express+Mysql 實(shí)現(xiàn)增刪改查

    這篇文章主要介紹了Node.js+Express+Mysql 實(shí)現(xiàn)增刪改查,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 利用Node.js編寫跨平臺(tái)的spawn語句詳解

    利用Node.js編寫跨平臺(tái)的spawn語句詳解

    Node.js 最強(qiáng)大的一點(diǎn)就是“跨平臺(tái)”。只要在編碼時(shí)稍微注意一下,你的代碼就通吃 Windows、Linux 和 OSX 平臺(tái)。下面這篇文章主要介紹了如何利用Node.js編寫跨平臺(tái)的spawn語句,需要的朋友可以參考借鑒。
    2017-02-02
  • 輕松創(chuàng)建nodejs服務(wù)器(9):實(shí)現(xiàn)非阻塞操作

    輕松創(chuàng)建nodejs服務(wù)器(9):實(shí)現(xiàn)非阻塞操作

    這篇文章主要介紹了輕松創(chuàng)建nodejs服務(wù)器(9):實(shí)現(xiàn)非阻塞操作,本系列文章會(huì)教你一步一步創(chuàng)建一個(gè)完整的服務(wù)器,要的朋友可以參考下
    2014-12-12
  • 詳解如何實(shí)現(xiàn)自由切換Node.js版本

    詳解如何實(shí)現(xiàn)自由切換Node.js版本

    作為開發(fā)者,我們經(jīng)常在不同的項(xiàng)目中需要使用不同版本的 Node.js,有時(shí)舊項(xiàng)目需要舊版本,而新項(xiàng)目則可能依賴最新的 Node.js 版本,本文將介紹幾種常用的方法來自由切換 Node.js 版本,需要的朋友可以參考下
    2024-10-10
  • 在Node.js中判定文件是否可執(zhí)行的方法詳解

    在Node.js中判定文件是否可執(zhí)行的方法詳解

    在進(jìn)行前端開發(fā)時(shí),經(jīng)常需要處理各種文件權(quán)限的問題,特別是在Node.js環(huán)境中,你可能想要判斷某個(gè)文件是否具有可執(zhí)行權(quán)限,本文將詳細(xì)介紹如何使用isexe模塊來進(jìn)行這一操作,需要的朋友可以參考下
    2024-05-05
  • node版本太高導(dǎo)致項(xiàng)目跑不起來的解決辦法(windows)

    node版本太高導(dǎo)致項(xiàng)目跑不起來的解決辦法(windows)

    換了臺(tái)電腦后,安裝node,一切完美,發(fā)現(xiàn)其中有一個(gè)uniapp的小程序項(xiàng)目跑不起來,感覺是node版本太高導(dǎo)致的,所以只能重新安裝低版本的node,本文給大家介紹了node版本太高的解決辦法,需要的朋友可以參考下
    2023-10-10
  • Nodejs之TCP服務(wù)端與客戶端聊天程序詳解

    Nodejs之TCP服務(wù)端與客戶端聊天程序詳解

    這篇文章主要為大家詳細(xì)介紹了Nodejs之TCP服務(wù)端與客戶端聊天程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 快速刪除node_modules的幾種方式小結(jié)

    快速刪除node_modules的幾種方式小結(jié)

    這篇文章主要介紹了快速刪除node_modules的幾種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02

最新評(píng)論

福海县| 崇礼县| 易门县| 临沧市| 德保县| 无极县| 博兴县| 山东省| 莎车县| 雷波县| 耒阳市| 衢州市| 海盐县| 余江县| 乐业县| 织金县| 赤水市| 通城县| 本溪市| 永平县| 石渠县| 缙云县| 丰镇市| 双桥区| 丹江口市| 政和县| 祁门县| 宁晋县| 洛浦县| 如皋市| 右玉县| 青川县| 乌什县| 洪泽县| 翁源县| 普洱| 大洼县| 隆安县| 新营市| 漳平市| 辉县市|