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

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

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

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

銀行卡也是這種,嘗試次數(shù)過多,就鎖定,說不定還會(huì)自動(dòng)報(bào)警。

效果圖

 

實(shí)現(xiàn)思路

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

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

代碼邏輯

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

當(dāng)記錄的日期不是當(dāng)天,那么重置

代碼封裝

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

(這里只實(shí)現(xiàn)了一天內(nèi)x次的簡單校驗(yàn),高級(jí)規(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 當(dāng)日登錄次數(shù) = 0
  let 當(dāng)日最多嘗試次數(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()){
      當(dāng)日登錄次數(shù) = (+n)
    }
  }
  if(當(dāng)日登錄次數(shù) >= 當(dāng)日最多嘗試次數(shù)){
    run = false
  }
  let 登錄失敗后修改狀態(tài)函數(shù) = () => {
    let add_login_number
    let 非當(dāng)日 = () => {
      更新到數(shù)據(jù)庫([getD(), 0].join('|'))
    }
    let 今天 = (n) => {
      更新到數(shù)據(jù)庫([getD(), n].join('|'))
    }
    if(!login_number){
      非當(dāng)日()
    }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: '賬戶異常鎖定, 請(qǐng)明天再試'
  })
  return
}

密碼錯(cuò)誤開始記錄

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

登錄完整代碼

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

這里的md5,是為了雙重加密,當(dāng)內(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]
    // 賬號(hào)不存在
    if(results.length == 0){
		  resolve({
		    code: 1,
		    msg: '密碼錯(cuò)誤', // 避免得知是否注冊(cè)賬號(hào)
		  })
    	return
    }

    // 次數(shù)校驗(yà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: '賬戶異常鎖定, 請(qǐng)明天再試'
      })
      return
    }

    if(results[0].pw !== pw){
      // 登錄失敗,更新登錄次數(shù)
      login_n.start()
    	resolve({
		    code: 1,
		    msg: '密碼錯(cuò)誤'
      })
    	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ù)器錯(cuò)誤'
    })
  })
})

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

相關(guān)文章

  • ajax +NodeJS 實(shí)現(xiàn)圖片上傳實(shí)例

    ajax +NodeJS 實(shí)現(xiàn)圖片上傳實(shí)例

    本篇文章主要介紹了ajax +NodeJS 實(shí)現(xiàn)圖片上傳實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 使用 Node.js 實(shí)現(xiàn)圖片的動(dòng)態(tài)裁切及算法實(shí)例代碼詳解

    使用 Node.js 實(shí)現(xiàn)圖片的動(dòng)態(tài)裁切及算法實(shí)例代碼詳解

    這篇文章主要介紹了使用 Node.js 實(shí)現(xiàn)圖片的動(dòng)態(tài)裁切功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-09-09
  • Node koa服務(wù)器實(shí)現(xiàn)獲取客戶端ip

    Node koa服務(wù)器實(shí)現(xiàn)獲取客戶端ip

    這篇文章主要為大家詳細(xì)介紹了Node koa服務(wù)器實(shí)現(xiàn)獲取客戶端ip的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解下
    2025-02-02
  • node?gyp安裝canvas原生模塊編譯node?pregyp詳解

    node?gyp安裝canvas原生模塊編譯node?pregyp詳解

    這篇文章主要為大家介紹了Nodejs關(guān)于原生模塊編譯node-gyp + node-pre-gyp (以安裝canvas為例)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 基于NodeJS的前后端分離的思考與實(shí)踐(一)全棧式開發(fā)

    基于NodeJS的前后端分離的思考與實(shí)踐(一)全棧式開發(fā)

    這個(gè)話題最近被討論得比較多,阿里有些BU也在進(jìn)行一些嘗試。討論了很久之后,我們團(tuán)隊(duì)決定探索一套基于NodeJS的前后端分離方案,過程中有一些不斷變化的認(rèn)識(shí)以及思考,記錄在這里,也希望看到的同學(xué)參與討論,幫我們完善。
    2014-09-09
  • 切換Node.js鏡像源的方法詳解

    切換Node.js鏡像源的方法詳解

    Node.js 是一個(gè)非常流行的 JavaScript 運(yùn)行環(huán)境,擁有許多強(qiáng)大的功能和庫,使得它在 Web 開發(fā)、服務(wù)器端編程等領(lǐng)域中廣泛使用,在本文中,我們將介紹如何切換 Node.js 的鏡像源,并提供一些思考和難點(diǎn),幫助讀者更好地理解這個(gè)問題,需要的朋友可以參考下
    2024-01-01
  • 10個(gè)最優(yōu)秀的Node.js MVC框架

    10個(gè)最優(yōu)秀的Node.js MVC框架

    這篇文章主要為大家詳細(xì)介紹了10個(gè)最優(yōu)秀的Node.js MVC框架,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • node中的crypto模塊操作方法

    node中的crypto模塊操作方法

    加密操作可能很棘手,以至于付費(fèi)的加密服務(wù)公司的存在只是為了確保在代碼庫中正確實(shí)現(xiàn)加密操作,本文給大家介紹node中的crypto模塊操作方法,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • nodejs導(dǎo)出excel的方法

    nodejs導(dǎo)出excel的方法

    這篇文章主要介紹了nodejs導(dǎo)出excel的方法,實(shí)例分析了nodejs導(dǎo)出excel的詳細(xì)步驟與相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • nodejs個(gè)人博客開發(fā)第二步 入口文件

    nodejs個(gè)人博客開發(fā)第二步 入口文件

    這篇文章主要為大家詳細(xì)介紹了nodejs個(gè)人博客開發(fā)的入口文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04

最新評(píng)論

丹寨县| 宝鸡市| 县级市| 乌拉特后旗| 西安市| 石城县| 辉南县| 青阳县| 社旗县| 十堰市| 恩平市| 资中县| 宝兴县| 安庆市| 榆林市| 当阳市| 高安市| 沙田区| 金塔县| 扶风县| 宁波市| 陈巴尔虎旗| 金湖县| 东丰县| 皮山县| 玉环县| 新宁县| 镇江市| 会同县| 碌曲县| 资阳市| 延长县| 保定市| 台江县| 黄浦区| 栾川县| 乌海市| 织金县| 桐乡市| 射阳县| 利辛县|