0

passport-local-mongooseユーザーデータをMongoDBに保存するために使用しています。ユーザーがパスワードを忘れた場合、メールで送信するためにパスワードを取得する必要があります。塩田に貯蔵します。どうすれば塩抜きできますか?

PSbcryptノード > 0.10.x では動作しないため、使用できません

4

1 に答える 1

2

パスワードを元のテキストに変換する形式は安全ではないだけでなく、ソルト化されたハッシュを保存することの全体的なポイントは、そもそもそれを困難/不可能にすることです.

代わりに、ユーザーにパスワードリセットリンクを送信/メールして、新しいパスワードを自分で再作成できるようにする必要があります。

基本的に、ユーザーにメールで送信する一意のトークンを作成する必要があります。また、後で検証するために、そのトークンをユーザー オブジェクトに保存します。このようなもの(疑似コード):

app.post('/reset-password', function(req, res){
    var email = req.body.email; // you had the user enter their email
    User.findByEmail(email, function(err, user){
        user.token = new Token(); // some library to create a token
        mail(user.email, 'Please visit http://example.com/reset-password/' + user.token); 
    });
});

したがって、ユーザーが電子メールを受け取ってhttp://example.com/reset-password/xxxxxxxxにアクセスすると、そのトークンでユーザーを確認し、新しいパスワードを作成することができます。

app.post('/reset-password/:token', function(req, res){
    var token = req.params.token;
    var password = req.body.password; // you had the user enter a new password
    User.findByToken(token, function(err, user){
        user.hash = new HashFromPassword(password); // some function to create hash from password;
    });
});

これで、ユーザーが自分のパスワードを正常にリセットできるようになりました。

実装の詳細については、次の記事をご覧ください: Node.js でパスワード リセットを実装する方法

于 2015-06-11T10:07:30.157 に答える