详解节点登录接口之密码错误限制次数(含代码)

  

密码次数尝试,可以有效的保护用户账户安全,有了限制之后,就算用量子计算机都束手无策。

  

银行卡也是这种,尝试次数过多,就锁定,说不定还会自动报警。

  

<>强效果图

  

详解节点登录接口之密码错误限制次数(含代码),

  

  

, <>强数据库表设计

  

在表里面添加一个字段,字符串类型。里面包含两个数据,密码失败尝试日期和次数如<代码> 2019 a10a23 | 10
  这里我使用|做数据段分割,一个字母做日期分割

  

<强>代码逻辑

  

当记录的日期是当天,那么密码错误的时候,<代码>次数+ 1

  

当记录的日期不是当天,那么重置

  

  

这是我实现的简单代码封装

  

(这里只实现了一天内x次的简单校验,高级规则需要自己改)

     /* *   *尝试登录次数限制   * login_number[日期,次数]. join (“|”)   *更新到数据库(更新数据)=比;{}   *返回{   *运行bool真的:超过错误的:正常   *开始登录失败后修改状态   *}   */出口。Login_n=(login_number,更新到数据库)=比;{   让运行=true   让当日登录次数=0   让当日最多尝试次数=10   var getD=()=比;{   var=new日期()   var d=[date.getUTCFullYear (), date.getMonth () + 1, date.getDate ()] . join (' a ')   返回维   }   如果(login_number) {   让日期=login_number.split (“|”) [0]   让n=login_number.split (“|”) [1]   如果(日期==getD ()) {   当日登录次数=(+ n)   }   }   如果当日登录次数祝辞=当日最多尝试次数){   运行=false   }   让登录失败后修改状态函数=()=比;{   让add_login_number   让非当日=()=比;{   更新到数据库([getD (), 0] . join (“|”))   }   让今天=(n)=比;{   更新到数据库([getD (), n] . join (“|”))   }   如果(! login_number) {   非当日()   其他}{   让日期=login_number.split (“|”) [0]   让n=login_number.split (“|”) [1]   如果(日期==getD ()) {   今天((+ n) + 1)   }   }   }   返回{   运行时,   开始:登录失败后修改状态函数   }   }      

  

引入,设置状态

        var {Login_n}=要求(“。/Login_n”)   var login_n=login_n (login_number (v)=比;{   db(“所有”、“更新t_user设置login_number=& # 63;id=& # 63;”, [v, id])。然后(结果=比;{   console.log(“修改登录失败次数记录成功”)   })   })      

拦截         如果(! login_n.run) {   解决({   代码:1,   味精:“账户异常锁定,请明天再试”   })   返回   }      

密码错误开始记录

        如果结果[0]。pw !==pw) {//登录失败,更新登录次数   login_n.start ()   解决({   代码:1,   味精:“密码错误的   })   返回   }      

  

需要引入上面的(错误限制次数代码)

  

这里的md5,是为了双重加密,当内部员工拿到数据库密码后也不容易登录,依赖nodejs内置包<代码>加密代码

        var加密=要求(加密)   出口。phone_pw_login=(params,点播)=比;新的承诺((决心,拒绝)=比;{   var {Login_n}=要求(“。/Login_n”)   让{通过,电话}=参数   var md5=crypto.createHash (md5);   让pw=md5.update(通过).digest(十六进制).toUpperCase ()   db(“所有”、“选择电话、pw id、名称、login_number从t_user电话=& # 63;”,[电话])。然后(结果=比;{   让{login_number, id}[0]=结果//账号不存在   如果结果。长度==0){   解决({   代码:1,   味精:“密码错误',//避免得知是否注册账号   })   返回   }//次数校验   var login_n=login_n (login_number (v)=比;{   db(“所有”、“更新t_user设置login_number=& # 63;id=& # 63;”, [v, id])。然后(结果=比;{   console.log(“修改登录失败次数记录成功”)   })   })   如果(! login_n.run) {   解决({   代码:1,   味精:“账户异常锁定,请明天再试”   })   返回   }      如果结果[0]。pw !==pw) {//登录失败,更新登录次数   login_n.start ()   解决({   代码:1,   味精:“密码错误的   })   返回   }   让牌=Jwt。创建({电话:结果[0]。电话,id: id、pw})      解决({   代码:200,   味精:{   名称:结果[0]. name,   电话:[0].phone结果,   令牌,   }   })   })   .catch(错误=比;{   console.log(错误)   解决({   代码:1,   味精:“服务器错误的   })   })   })

详解节点登录接口之密码错误限制次数(含代码)