欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解node登錄接口之密碼錯誤限制次數(shù)(含代碼)

 更新時間:2019年10月25日 10:08:32   作者:謝秀岳lonelyBoy  
這篇文章主要介紹了nodejs登錄接口之密碼錯誤限制次數(shù)(含代碼),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

密碼次數(shù)嘗試,可以有效的保護用戶賬戶安全,有了限制之后,就算用量子計算機都束手無策。

銀行卡也是這種,嘗試次數(shù)過多,就鎖定,說不定還會自動報警。

效果圖

 

實現(xiàn)思路

 數(shù)據(jù)庫表設(shè)計

在表里面添加一個字段,string類型。里面包含兩個數(shù)據(jù),密碼失敗嘗試日期 和 次數(shù) 如 2019a10a23|10
這里我使用|做數(shù)據(jù)段分割,a字母做日期分割

代碼邏輯

當記錄的日期是當天,那么密碼錯誤的時候, 次數(shù)+1

當記錄的日期不是當天,那么重置

代碼封裝

這是我實現(xiàn)的簡單代碼封裝

(這里只實現(xiàn)了一天內(nèi)x次的簡單校驗,高級規(guī)則需要自己改)

/**
 * 嘗試登錄次數(shù)限制
 * login_number [日期, 次數(shù)].join('|')
 * 更新到數(shù)據(jù)庫 (更新數(shù)據(jù)) => {}
 * return {
 * run bool true: 超過 false: 正常
 * start 登錄失敗后修改狀態(tài)
 * }
 */
exports.Login_n = (login_number, 更新到數(shù)據(jù)庫) => {
  let run = true
  let 當日登錄次數(shù) = 0
  let 當日最多嘗試次數(shù) = 10
  var getD = () => {
    var date = new Date()
    var d = [date.getUTCFullYear(), date.getMonth() + 1, date.getDate()].join('a')
    return d
  }
  if(login_number){
    let date = login_number.split('|')[0]
    let n = login_number.split('|')[1]
    if(date == getD()){
      當日登錄次數(shù) = (+n)
    }
  }
  if(當日登錄次數(shù) >= 當日最多嘗試次數(shù)){
    run = false
  }
  let 登錄失敗后修改狀態(tài)函數(shù) = () => {
    let add_login_number
    let 非當日 = () => {
      更新到數(shù)據(jù)庫([getD(), 0].join('|'))
    }
    let 今天 = (n) => {
      更新到數(shù)據(jù)庫([getD(), n].join('|'))
    }
    if(!login_number){
      非當日()
    }else{
      let date = login_number.split('|')[0]
      let n = login_number.split('|')[1]
      if(date == getD()){
        今天((+n) + 1)
      }
    }
  }
  return {
    run,
    start: 登錄失敗后修改狀態(tài)函數(shù)
  }
}

使用

引入 & 設(shè)置狀態(tài)

var { Login_n } = require('./login_n')
var login_n = Login_n(login_number, (v) => {
  db('all', 'update t_user set login_number=? where id=?', [v, id]).then(results => {
    console.log('修改登錄失敗次數(shù)記錄成功')
  })
})

攔截

if(!login_n.run){
  resolve({
    code: 1,
    msg: '賬戶異常鎖定, 請明天再試'
  })
  return
}

密碼錯誤開始記錄

if(results[0].pw !== pw){
  // 登錄失敗,更新登錄次數(shù)
  login_n.start()
	resolve({
    code: 1,
    msg: '密碼錯誤'
  })
	return
} 

登錄完整代碼

需要引入上面的(錯誤限制次數(shù)代碼)

這里的md5,是為了雙重加密,當內(nèi)部員工拿到數(shù)據(jù)庫密碼后也不容易登錄, 依賴nodejs內(nèi)置包 crypto

var crypto = require('crypto')
exports.phone_pw_login = (params, req) => new Promise((resolve, reject) => {
  var { Login_n } = require('./login_n')
  let {pass, phone} = params
  var md5 = crypto.createHash("md5");
  let pw = md5.update(pass).digest('hex').toUpperCase()
  db('all', 'SELECT phone, pw, id, name, login_number from t_user WHERE phone=?', [phone]).then(results => {
    let { login_number, id } = results[0]
    // 賬號不存在
    if(results.length == 0){
		  resolve({
		    code: 1,
		    msg: '密碼錯誤', // 避免得知是否注冊賬號
		  })
    	return
    }

    // 次數(shù)校驗
    var login_n = Login_n(login_number, (v) => {
      db('all', 'update t_user set login_number=? where id=?', [v, id]).then(results => {
        console.log('修改登錄失敗次數(shù)記錄成功')
      })
    })
    if(!login_n.run){
      resolve({
        code: 1,
        msg: '賬戶異常鎖定, 請明天再試'
      })
      return
    }

    if(results[0].pw !== pw){
      // 登錄失敗,更新登錄次數(shù)
      login_n.start()
    	resolve({
		    code: 1,
		    msg: '密碼錯誤'
      })
    	return
    } 
    let token = Jwt.Create({phone: results[0].phone, id: id, pw})
    
    resolve({
	    code: 200,
	    msg: {
	    	name: results[0].name,
	    	phone: results[0].phone,
	    	token,
	    }
	  })
  })
  .catch(error => {
    console.log(error)
    resolve({
      code: 1,
      msg: '服務(wù)器錯誤'
    })
  })
})

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

相關(guān)文章

  • 使用Nodejs?實現(xiàn)一個簡單的?Redis客戶端(推薦)

    使用Nodejs?實現(xiàn)一個簡單的?Redis客戶端(推薦)

    在nodejs中支持TCP連接的是net模塊,?其中使用createConnection(config)或者直接new?Socket(config)來初始化一個TCP連接,這篇文章主要介紹了用Nodejs?實現(xiàn)一個簡單的?Redis客戶端,需要的朋友可以參考下
    2022-11-11
  • 使用pm2部署node生產(chǎn)環(huán)境的方法步驟

    使用pm2部署node生產(chǎn)環(huán)境的方法步驟

    這篇文章主要介紹了使用pm2部署node生產(chǎn)環(huán)境的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • 詳解nodejs 文本操作模塊-fs模塊(三)

    詳解nodejs 文本操作模塊-fs模塊(三)

    本篇文章主要介紹了nodejs 文本操作模塊-fs模塊(三),詳細的講訴了readFile,和writeFile方法,具有一定的參考價值,有興趣的可以了解一下。
    2016-12-12
  • 基于 Node 實現(xiàn)簡易 serve靜態(tài)資源服務(wù)器的示例詳解

    基于 Node 實現(xiàn)簡易 serve靜態(tài)資源服務(wù)器的示例詳解

    靜態(tài)資源服務(wù)器(HTTP 服務(wù)器)可以將靜態(tài)文件(如 js、css、圖片)等通過 HTTP 協(xié)議展現(xiàn)給客戶端。本文介紹如何基于 Node 實現(xiàn)一個簡易的靜態(tài)資源服務(wù)器,感興趣的朋友一起看看吧
    2022-06-06
  • Nodejs之TCP服務(wù)端與客戶端聊天程序詳解

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

    這篇文章主要為大家詳細介紹了Nodejs之TCP服務(wù)端與客戶端聊天程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • node.js實現(xiàn)的裝飾者模式示例

    node.js實現(xiàn)的裝飾者模式示例

    這篇文章主要介紹了node.js實現(xiàn)的裝飾者模式,簡單說明了裝飾者模式的原理、功能并結(jié)合實例形式給出了node.js裝飾者模式的實現(xiàn)方法,需要的朋友可以參考下
    2017-09-09
  • Nodejs使用express 編寫接口的實現(xiàn)

    Nodejs使用express 編寫接口的實現(xiàn)

    express是一個第三方模塊,支持豐富的api,本文主要介紹了Nodejs使用express 編寫接口的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • nodejs 圖解express+supervisor+ejs的用法(推薦)

    nodejs 圖解express+supervisor+ejs的用法(推薦)

    下面小編就為大家?guī)硪黄猲odejs 圖解express+supervisor+ejs的用法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Nest.js 授權(quán)驗證的方法示例

    Nest.js 授權(quán)驗證的方法示例

    這篇文章主要介紹了Nest.js 授權(quán)驗證的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Node.js斷點續(xù)傳的實現(xiàn)

    Node.js斷點續(xù)傳的實現(xiàn)

    最近做了個項目,應(yīng)項目需求,需要傳圖片、Excel等,幾M的大小可以很快就上傳到服務(wù)器,但是大的就需要斷點上傳,本文就介紹一下,感興趣的可以了解一下
    2021-05-05

最新評論