Temelde aynı şeyi arıyordum. Özellikle, aşağıdakileri istedim:
- Connect'in ara katman yazılımı özelliğini saran express.js'yi kullanmak için
- "Form tabanlı" kimlik doğrulaması
- Hangi yolların kimliğinin doğrulandığı üzerinde ayrıntılı denetim
- Kullanıcılar / şifreler için bir veritabanı arka ucu
- Oturumları kullan
Yaptığım şey, check_auth
kimlik doğrulamasını istediğim her rotaya argüman olarak ilettiğim kendi ara katman yazılım fonksiyonumu yaratmaktı . check_auth
yalnızca oturumu kontrol eder ve kullanıcı oturum açmadıysa, oturum açma sayfasına yönlendirir, şöyle:
function check_auth(req, res, next) {
// if the user isn't logged in, redirect them to a login page
if(!req.session.login) {
res.redirect("/login");
return; // the buck stops here... we do not call next(), because
// we don't want to proceed; instead we want to show a login page
}
// the user is logged in, so call next()
next();
}
Sonra her rota için bu fonksiyonun ara katman yazılımı olarak geçmesini sağlarım. Örneğin:
app.get('/tasks', check_auth, function(req, res) {
// snip
});
Son olarak, giriş işlemini gerçekten ele almamız gerekiyor. Bu basit:
app.get('/login', function(req, res) {
res.render("login", {layout:false});
});
app.post('/login', function(req, res) {
// here, I'm using mongoose.js to search for the user in mongodb
var user_query = UserModel.findOne({email:req.body.email}, function(err, user){
if(err) {
res.render("login", {layout:false, locals:{ error:err } });
return;
}
if(!user || user.password != req.body.password) {
res.render("login",
{layout:false,
locals:{ error:"Invalid login!", email:req.body.email }
}
);
} else {
// successful login; store the session info
req.session.login = req.body.email;
res.redirect("/");
}
});
});
Her halükarda, bu yaklaşım çoğunlukla esnek ve basit olacak şekilde tasarlanmıştır. Eminim onu geliştirmenin birçok yolu vardır. Eğer varsa, görüşlerinizi çok isterim.
EDIT: Bu basitleştirilmiş bir örnektir. Bir üretim sisteminde, şifreleri asla düz metin olarak saklamak ve karşılaştırmak istemezsiniz. Bir yorumcunun işaret ettiği gibi, şifre güvenliğini yönetmeye yardımcı olabilecek kütüphaneler vardır.
omniauth
(raylar) veya python'a eşdeğer bir şeysocial-auth
. PHP (ve diğer yaygın web sunucusu dilleri) kullanıcıları eşdeğerlerini de ekleyebilir.