node.js - bcrypt 密码在一段时间后更改

我创建了一个类似于博客应用程序的应用程序。用户可以注册和登录注销。当用户创建它的帐户而不是注销时,他/她可以使用相同的密码再次登录。但是,在用户尝试使用相同的密码和用户名登录时(我无法准确指定时间,但超过 1 天)后。 Bcrypt 返回假。

这是用户尝试登录时的功能。

userSchema.statics.login = async function(username,password){


const user = await this.findOne({username})
if (user){
    const auth = await bcrypt.compare(password,user.password)
    console.log(auth)
    if (auth){
        return user
    }else{
        throw Error('Password is wrong.')
    }
}else{
    throw Error('Username doesn\'t exist.')
}}

这是用户注册时的功能。

userSchema.pre('save', async function(next){
const salt = await bcrypt.genSalt()
this.password = await bcrypt.hash(this.password,salt)
next()
})

回答1

不确定这是否有帮助,但这就是我使用 bcrypt 预保存密码以及比较 passwords 时的方式:

// hash the password before the user is saved
UserSchema.pre('save', function hashPassword(next) {
  // hash the password only if the password has been changed or user is new
  if (!this.isModified('password')) {
    next();
    return;
  }

  // generate the hash
  _hash(this.password, null, null, (err, hash) => {
    if (err) {
      next(err);
      return;
    }

    // change the password to the hashed version
    this.password = hash;
    next();
  });
});

// method to compare a given password with the database hash
UserSchema.methods.comparePassword = function comparePassword(password) {
  const data = compareSync(password, this.password);
  return data;
};

相似文章

reactjs - Bcrypyt 和 ReactJS 问题

我正在react中尝试POC,我使用了react+mysql,并且对于DB操作,我正在使用sequelize。我的登录、注册等工作正常,直到现在我将密码作为纯文本存储在数据库中。现在我想在数据库中st...