web-dev-qa-db-ja.com

パスポートモジュール(パスポートローカル)と互換性を持たせるためにdbに保存する前にパスワードをハッシュする方法

私は認証にパスポートのローカル戦略を使用しています。 Expressサーバーで、POST登録要求を受け取っているので、新しいユーザーのパスワードをdbに保存する必要があります。しかし、dbに保存する前にパスワードをハッシュする必要があります。

しかし、パスポートはログインパスワードの資格情報をハッシュしてdbからのハッシュされたパスワードと一致させることでユーザーを認証するため、ハッシュする方法がわかりません。パスワードをハッシュするにはどうすればよいですか?

私はこれを使用しています モジュール

11
FurkanO

passport-localはパスワードをハッシュしません-それ 資格情報を検証コールバックに渡します 検証のために、あなたは資格情報の処理を処理します。したがって、任意のハッシュアルゴリズムを使用できますが、 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);
    }
  });
}));
20
vesse

これを試しましたか?

https://www.npmjs.com/package/passport-local-authenticate

var auth = require('passport-local-authenticate');

auth.hash('password', function(err, hashed) {
  console.log(hashed.hash); // Hashed password
  console.log(hashed.salt); // Salt
});

auth.hash('password', function(err, hashed) {
  auth.verify('password', hashed, function(err, verified) {
    console.log(verified); // True, passwords match
  ));
});

auth.hash('password', function(err, hashed) {
  auth.verify('password2', hashed, function(err, verified) {
    console.log(verified); // False, passwords don't match
  ));
});
2
fulvio

パスポートがすでにハッシュアルゴリズムを提供しているのに、なぜハッシュアルゴリズムを使用する必要があるのですか?つまり、passport-local-mongooseを次のようなユーザースキーマにプラグインする必要があります。UserSchema.plugin(passportLocalMongoose)次に、登録ルート内で、passportLocalMongooseにハッシュを実行するように指示します。使用:

User.register(new User({username:req.body.username}), req.body.password,function(err,newUser)
{ 
    if(err){
        something
    }else{
        something
    }
)

上記を実行することにより、ハッシュを処理する必要がなくなり、それが実行されます。私が間違っているか、あなたの質問が間違っている場合は、私を訂正してください。

0
jalil