nodeJs 實現(xiàn)郵箱驗證碼注冊

nodeJs 實現(xiàn)郵箱驗證碼注冊

功能設(shè)計

參考內(nèi)容

1. 邏輯

用戶輸入郵箱承绸,獲取驗證碼

  • 驗證該郵件是否已經(jīng)注冊過
  • 驗證該郵件是否已經(jīng)發(fā)送驗證碼,驗證碼是否過期链烈。過期則重新生成驗證碼數(shù)據(jù)庫更新驗證碼驰后。否則生成驗證碼存入數(shù)據(jù)庫
  • 基于nodemailer發(fā)送驗證碼
  • 注冊成功,新用戶信息插入用戶表,刪除emal表該用戶驗證碼信息

2.數(shù)據(jù)表

User表

用戶表

id email password
1 1@qq.com 密碼
Email

生成驗證碼后爷光,需要將驗證碼和郵箱存在email表,用戶在注冊提交時用來驗證驗證碼是否正確是否過期梦湘。

用戶注冊成功后瞎颗,刪除該條記錄。

id email email_code
1 1@qq.com 驗證碼

3. 郵箱開啟SMTP服務(wù)(QQ郵箱)

image

4.代碼參考


const NodeEmail = require('nodemailer');
const { emailConfig } = require('../../config/base');
const EmailModel = require('../model/Email');
const UserModel = require('../model/User');
const { EmailExistHttpException } = require('../lib/HttpException')
const transporter = NodeEmail.createTransport({
  service: 'qq',
  port: 465,
  secureConnection: true, 
  auth: emailConfig.auth // => { user: 你的郵箱, pass: 你的郵箱密碼捌议,開啟POP3/SMTP的密碼哼拔,如上圖 }
});

class Email {

  static async getEmailCode(email) {
    const user = await UserModel.findUser(email);
    if (user) throw new EmailExistHttpException();
    const db = await EmailModel.findEmail(email);
    
    // 生成驗證碼
    let code = Math.random().toString().slice(-6);
    
    if (!db) { // 當(dāng)前email不存在,既沒有給該email發(fā)送過驗證碼
      await EmailModel.inster(email, code);
    } else { // 當(dāng)前email瓣颅,已經(jīng)發(fā)送了驗證碼
      const startTime = new Date(db.createdAt).getTime();
      const intervalTime = 1000 * 60 * 60; // 過期時間
      if (new Date().getTime() - startTime > intervalTime ){
        await EmailModel.updateCode(email, code);
      }else{
        code = db.email_code;
      }
    }
    const subject = "賬號注冊";
    const text = "text";
    const html = `<div><span>驗證碼:</span><b>${code}</b></div>`;
    await Email.SendEmail(email, subject, text, html);
    return { message: '郵件已發(fā)送' };
  }

  static async SendEmail(email, subject, text, html) {
    return await transporter.sendMail({
      from: emailConfig.auth.user, // 發(fā)送者郵箱地址
      to: email,                   // 接收這郵箱地址
      subject,                     // 郵件主題
      html,                        // html模板
      text                         // 文本內(nèi)容
    })
  }
}


module.exports = Email;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末倦逐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子宫补,更是在濱河造成了極大的恐慌檬姥,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粉怕,死亡現(xiàn)場離奇詭異健民,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)贫贝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進(jìn)店門秉犹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人稚晚,你說我怎么就攤上這事崇堵。” “怎么了客燕?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵鸳劳,是天一觀的道長。 經(jīng)常有香客問我也搓,道長赏廓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任傍妒,我火速辦了婚禮楚昭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拍顷。我一直安慰自己抚太,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著尿贫,像睡著了一般电媳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上庆亡,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天匾乓,我揣著相機(jī)與錄音,去河邊找鬼又谋。 笑死拼缝,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的彰亥。 我是一名探鬼主播咧七,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼任斋!你這毒婦竟也來了继阻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤废酷,失蹤者是張志新(化名)和其女友劉穎瘟檩,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體澈蟆,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡墨辛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了趴俘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睹簇。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖哮幢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情志珍,我是刑警寧澤橙垢,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站伦糯,受9級特大地震影響柜某,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜敛纲,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一喂击、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧淤翔,春花似錦翰绊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谐檀。三九已至,卻和暖如春裁奇,著一層夾襖步出監(jiān)牢的瞬間桐猬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工刽肠, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留溃肪,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓音五,卻偏偏與公主長得像惫撰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子放仗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,514評論 2 348