Mongoose と ExpreeJS でユーザーを認証する最良の方法は何ですか?
私は mongoose 3.x を使用していますが、このパッケージはもう更新されていないようです: https://github.com/bnoguchi/mongoose-auth
理想的には、twitter と facebook でもユーザーを認証できます。
Mongoose と ExpreeJS でユーザーを認証する最良の方法は何ですか?
私は mongoose 3.x を使用していますが、このパッケージはもう更新されていないようです: https://github.com/bnoguchi/mongoose-auth
理想的には、twitter と facebook でもユーザーを認証できます。
私は常に、すべての問題にプラグインやモジュールを使用しないことを好みます。マングースだけを使用すると、次のように実行できます。
mongoDB 構成用の db.js を用意する
var mongoose = require('mongoose');
mongoose.connect("mongodb://...");
var userSchema = new mongoose.Schema({
username: String,
salt: String,
hash: String
});
exports.User = mongoose.model("user", userSchema);
TJ のpass.jsファイルを使用してパスワードをハッシュします。暗号化にはcrypto.pbkdf2を使用します。
手動でユーザーを作成するか、フォームを使用して自己登録を許可します。
var db = require('./db');
var pwd = require('./pwd');
var user = new db.User();
user.username = "Admin";
pwd.hash("adminPassword", function(err, salt, hash) {
if (err) {
console.log(err);
}
user.salt = salt;
user.hash = hash;
user.save(function(err) {
if (err) {
console.log(err);
} else {
console.log("user saved");
}
});
});
これで、データベースにユーザー名、暗号化されたパスワード、およびハッシュを持つユーザーがいるはずです。ログインを確認するには、ミドルウェア関数を使用します。
function authenticate(name, pass, fn) {
db.User.findOne ({username: name}, function(err, user) {
if (!user) return fn(new Error('cannot find user'));
hash(pass, user.salt, function(err, hash){
if (err) return fn(err);
if (hash == user.hash) return fn(null, user);
fn(new Error('invalid password'));
})
})
}
app.post('/login', function(req, res){
authenticate(req.body.username, req.body.password, function(err, user){
if (user) {
req.session.regenerate(function(){
req.session.user = user;
res.redirect('back');
});
} else {
res.redirect('login');
}
});
});
// middleware
function restrict(req, res, next) {
if (req.session.user) {
next();
} else {
req.session.error = 'Access denied!';
res.redirect('/login');
}
}
// route with restrict middleware
app.get('/restricted', restrict, function(req, res){
res.send('Wahoo! restricted area');
});
ほとんどのコードはauthの例から取ったもので、mongoose 用のものを追加しました。お役に立てれば!
MongoDB と Node でこれを行う方法を学習するときに、この例を使用しました。
https://github.com/braitsch/node-login
これは、ユーザー認証を自分で行う、非常に良い孤立した例だと思います。bcrypt を使用して、ユーザー パスワードのハッシュとソルトを行います。AccountManagerの内部を見ると、Mongo データベースでどのように機能するかがわかります。
ただし、他の戦略を使用して認証したい場合は、Passport.jsを確認することをお勧めします。使用する機会はありませんでしたが、かなりよく発達していてシンプルに見えると思います。おそらく、このページをあなたの経験で更新することができます.