用Mongoose和ExpreeJS認證用戶的最佳方式是什麼?通過mongoose + express.js認證用戶
我使用的是貓鼬3.x和它看起來像這個包沒有被更新了:https://github.com/bnoguchi/mongoose-auth
理想的情況下,我可以驗證與Twitter和Facebook的用戶了。
https://github.com/braitsch/node-login
我認爲這是做用戶驗證自己的一個很好的孤立的例子:
用Mongoose和ExpreeJS認證用戶的最佳方式是什麼?通過mongoose + express.js認證用戶
我使用的是貓鼬3.x和它看起來像這個包沒有被更新了:https://github.com/bnoguchi/mongoose-auth
理想的情況下,我可以驗證與Twitter和Facebook的用戶了。
https://github.com/braitsch/node-login
我認爲這是做用戶驗證自己的一個很好的孤立的例子:
我學習的時候如何使用MongoDB的和節點做到這一點用這個例子。它使用bcrypt來哈希和salt用戶密碼。如果你看看AccountManager你可以看到它如何與Mongo數據庫一起工作。
但是,如果您想使用其他策略進行身份驗證,我建議您查看Passport.js。我沒有機會使用它,但我認爲它看起來非常發達並且足夠簡單。也許你可以用你的經驗更新這個頁面。
我總是不願爲每個問題使用插件或模塊。只用貓鼬,你可以做這樣的:
有一個db.js您的MongoDB配置
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例如採取和我加了東西的貓鼬。希望這可以幫助!
這非常有幫助。謝謝。 –
謝謝。我在看護照,但我認爲它不夠靈活,我看不到一種方式來定製用戶如何進行身份驗證。我會通過節點登錄代碼達到頂點,並且在玉石上c :) :) – chovy
我也在翡翠中徘徊。我自己是[EJS](embeddedjs.com)的人。無論您使用什麼模板(如果有),您都應該能夠使用節點登錄作爲指導。 –