2014-07-10 3 views
5

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?

+0

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

Antwort

0

Ich bin nicht sehr vertraut mit Pass, aber wenn es ähnlich wie express-session funktioniert, wird das req.session Objekt in einem (möglicherweise verschlüsselten) Cookie gespeichert und wenn Sie ein Authentifizierungssystem aus diesem bauen, können Sie speichern Benutzerinformationen in req.session.user und sicher sein, dass es sicher ist.

Verwandte Themen