Ich verwende eine einfache Middleware-Funktion in meinen express.js
App, um zu überprüfen, ob ein Benutzer Admin-Rechte hat:Wird überprüft, ob ein Benutzer ein Administrator ist, der auf req.user secure basiert?
function isAdmin (req, res, next) {
if (req.user.admin)
return next();
res.redirect("/");
}
passport
für Konto-Authentifizierung verwendet wird.
Ist dies sicher oder kann req.user.admin
in die Anfrage für Benutzer eingegeben werden, die keine Administratorrechte haben sollen? Sollte ich zuerst einen Benutzer finden und dann prüfen, ob dieser Benutzer Administratorrechte hat? Zum Beispiel:
function isAdmin (req, res, next) {
if (req.user) {
User.findOne({ "_id" : req.user._id }, function (err, user) {
if (err) {
throw err;
} else if (user.admin) {
return next();
} else {
res.redirect("/");
}
})
} else {
res.redirect("/");
}
}
Für mich scheint dies unnötig kompliziert. Es würde auch mehr Datenbankzugriffe verursachen. Ist dies notwendig, um zu überprüfen, ob ein Benutzer wirklich ein Administrator ist oder meine erste Funktion ausreicht? Wer kann im Wesentlichen req
und damit req.user
ansehen oder ändern?
Diese Frage könnte für Sie relevant sein: http://stackoverflow.com/questions/24649274/authentication-with-passport-can-i-trust-that-req-user-is-indeed-the-logged-in – dylants