2016-06-14 12 views
0

Ich habe eine Express-App mit der Pass-lokalen Strategie, die Mongoose zum Speichern von Benutzerkonten verwendet. Ich hatte einen Freelancer, der diesen Teil der App für mich schrieb, weil ich keinen Sinn darin hatte, das Login-System von Anfang bis Ende zu erstellen (jedes einzelne Tutorial, das ich fand, tat es auf andere Weise). Der Nachteil davon ist, dass ich nicht verstehe, was jeder Teil tut. Das ist in meiner app.js Datei:Überprüfen Sie, ob der Benutzer in Passport-Local existiert

const Account = require('./models/db/AccountsSchema'); 

app.use(passport.initialize()); 
app.use(passport.session()); 

passport.use(new LocalStrategy(Account.authenticate())); 
passport.serializeUser(Account.serializeUser()); 
passport.deserializeUser(Account.deserializeUser()); 

und dies ist in routes/index.js:

router.post('/register', function(req, res) { 
    Account.register(new Account({ 
     username: req.body.username, 
     name: req.body.name 
    }), req.body.password, function(err, account) { 
     if (err) { 
      console.log(err); 
     } else { 
      console.log(account); 
      passport.authenticate('local', { 
       successRedirect: '/', 
       failureRedirect: '/login' 
      })(req, res, function(err, user) { 
       res.redirect('/'); 
      }); 
     } 
    }); 
}); 

zusammen mit:

router.post('/login', 
    passport.authenticate('local'), 
    function(req, res) { 
     res.redirect('/'); 
    } 
); 

Jetzt im Login-POST-Anfrage ich einen Scheck haben will für ob ein Benutzer mit diesem bestimmten Benutzernamen existiert, so dass ich, wenn das Passwort falsch ist, dem Benutzer sagen kann, dass das Passwort falsch ist. Benutzeraufzählung ist hier kein Sicherheitsrisiko.

Wo in meinem Code kann ich eine Datenbanküberprüfung einbeziehen, ob ein Konto mit dem angegebenen Benutzernamen existiert?

Antwort

0

In Account.authenticate() Funktion. Wie es die LocalStrategy in Ihrem Fall einstellt.

Einstellung Ihrer lokalen Strategie:

passport.use(new LocalStrategy(Account.authenticate())); 

Beispielcode:

function authenticate(username, password, done) { 
    User.findOne({ username: username }, function(err, user) { 
     if (err) { return done(err); } 
     if (!user) { 
     return done(null, false, { message: 'Incorrect username.' }); 
     } 
     if (!user.validPassword(password)) { 
     return done(null, false, { message: 'Incorrect password.' }); 
     } 
     return done(null, user); 
    }); 
    } 
+0

Ich sehe nicht, wo user.validPassword() herkommt. Ist das eine Funktion von pass.js? – Ric

+0

@Ric ist es nicht eine Funktion von pass.js, sondern benutzerdefinierte Modellfunktionen im Mungoschema definiert. – Nivesh

Verwandte Themen