亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

無法保存 bcrypt-nodejs 加密后的密碼問題

標簽:
Node.js

很多同学学习《node建站攻略(二期)》课程时,遇到注册用户时无法保存加密后的密码的问题。写法大概如下:

var bcrypt = require('bcrypt-nodejs');

// 此处省略无关代码...

bcrypt.hash(user.password, null, null, function (err, hash) {
    user.password = hash; // 注意:这里是异步执行的
    next();
});

我理解的出错的原因是 user.password = hash; 这一步是异步执行的,还没将加密后的值赋值给 user.password 属性时,明文密码已经保存到数据库了。因此,在做登录验证密码时,拿明文密码和加密后的密码比较,自然也就无法通过验证。

可以参考以下写法:

UserSchema.pre('save', function (next) {

  // 此处省略无关代码...

  var hash = bcrypt.hashSync(this.password);
  this.password = hash; // 注意:这里是同步执行的
  next();
});

UserSchema.methods = {
  comparePassword: function (_password, cb) {
    var hash = this.password;
    var isMatch = bcrypt.compareSync(_password, hash);
    cb(null, isMatch);
  }
};

注:本人也是在 node.js 学习阶段,如果理解有误,敬请指正。

點擊查看更多內容
1人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消