一尘不染

保存到数据库以与护照模块兼容之前,如何对密码进行哈希加密(本地护照)

node.js

我正在使用护照的本地护照策略进行身份验证。在我的快递服务器中,我收到注册请求,应该将新用户的密码保存到db中。但是我需要在保存到数据库之前对密码进行哈希处理。

但是我不确定如何对其进行哈希处理,因为password会通过对登录密码凭据进行哈希处理来匹配我从数据库获得的哈希密码,从而对用户进行身份验证。我应该如何哈希我的密码?

我正在使用这个模块


阅读 201

收藏
2020-07-07

共1个答案

一尘不染

passport-local不会对您的密码进行哈希处理-
它将凭据传递给您的verify回调以进行验证,并且您需要处理凭据。因此,您可以使用任何哈希算法,但我相信bcrypt是最受欢迎的算法。

您在注册处理程序中对密码进行哈希处理:

app.post('/register', function(req, res, next) {
  // Whatever verifications and checks you need to perform here
  bcrypt.genSalt(10, function(err, salt) {
    if (err) return next(err);
    bcrypt.hash(req.body.password, salt, function(err, hash) {
      if (err) return next(err);
      newUser.password = hash; // Or however suits your setup
      // Store the user to the database, then send the response
    });
  });
});

然后在您的验证回调中,将提供的密码与哈希进行比较:

passport.use(new LocalStrategy(function(username, password, cb) {
  // Locate user first here
  bcrypt.compare(password, user.password, function(err, res) {
    if (err) return cb(err);
    if (res === false) {
      return cb(null, false);
    } else {
      return cb(null, user);
    }
  });
}));
2020-07-07