2017-03-29 7 views
1

パスワードと塩をMongoDBに保存しようとしていますが、どのデータ型を使用するべきかわかりません。文字列を使用すると、暗号化されたパスワードが正しく格納されているように見えますが、生成された塩はnew Buffer(crypto.randomBytes(16).toString('base64'), 'base64');で作成され、認識されなかった文字があるようです。例えば、私はy_6jとして格納塩(L〜Z} 0 \を持っている」と私はこれが正しいとは思わない。塩とパスワードをMongoDBに保存する方法

は、それが文字列として保存されているという問題ですか?

+0

nodejsでmongodbを使用していますか?はいの場合はNPMパッケージ( [bcrypt](https://www.npmjs.com/package/bcrypt))があります。あなたは塩を保存せずにパスワードを一致させることができます。 –

+0

nodejsを使用しています。各ユーザーが異なる塩を持ち、塩がどこにも保存されていない場合、保存されたハッシュパスワードと比較するためにパスワードをハッシュするときにどのような塩を使用するのかをどのように知ることができますか? – RUEMACHINE

答えて

8

ユーザーを登録するときに、bryptを使用してハッシュされたパスワードを生成することができます。このパスワードをP#1としましょう。このハッシュされたパスワード(P#1)はデータベースではなく、塩ではなく保存してください。

ユーザーあなたが送信するパスワードのハッシュバージョンを生成し、それをP#2と呼ぶことにしましょう。これで、P#1とP#2を一致させるだけで、一致すればユーザは認証されます。あなたのデータベースの塩。

私は例の助けを借りて簡単な方法でそれを入れようとします。

//私のユーザー・スキーマ

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var bcrypt = require('bcrypt-nodejs'); 

var userSchema = new Schema({ 
    username: String 
    password: String, 
}); 

// hash the password 
userSchema.methods.generateHash = function(password) { 
    return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null); 
}; 

// checking if password is valid 
userSchema.methods.validPassword = function(password) { 
    return bcrypt.compareSync(password, this.password); 
}; 
var User = mongoose.model('user', userSchema); 
module.exports = User; 

//

var User = require('/path/to/user/model'); 

app.post('/register', function(req, res) { 
    var new_user = new User({ 
    username: req.username 
    }); 

    new_user.password = new_user.generateHash(userInfo.password); 
    new_user.save(); 
}); 

app.post('/login', function(req, res) { 
    User.findOne({username: req.body.username}, function(err, user) { 

    if (!user.validPassword(req.body.password)) { 
     //password did not match 
    } else { 
     // password matched. proceed forward 
    } 
    }); 
}); 

ユーザーを登録し、認証するための私のAPIは、それはあなたのお役に立てば幸い!

関連する問題