2016-06-23 14 views
0

So läuft mir ein Problem mit einer lokalen Strategie zu authentifizieren. Wenn ich ungültige An-Meldeinformation oder irgendetwas nicht erfolgreich übergebe, erhalte ich den entsprechenden Fehler. Wenn die Authentifizierung erfolgreich ist, wird jedoch ein Fehler 404 angezeigt.NodeJS, Passport & Passport-Local

Ich habe herum gegraben, und die beste Idee, die ich rannte, war das Fallenlassen des Sitzungsspeichers (wo es scheint, passiert zu sein, beim Serialisieren des Benutzers). Jeder hat ein Problem wie dieses?

Hier ist ein Teil des Codes, wenn Sie andere Abschnitte des Codes benötigen, lassen Sie es mich wissen, ich werde es gerne zur Verfügung stellen.

My Passport-Konfiguration:

var passport = require('passport'), 
User = require('mongoose').model('User'); 

module.exports = function() { 
    passport.serializeUser(function (user, done) { 
     done(null, user.id); 
    }); 

    passport.deserializeUser(function (id, done) { 
     User.findOne({ _id: id }, '-password -salt -__v', function (err, user) { 
      done(err, user); 
     }); 
    }); 

    require('./strategies/local')(); 
}; 

My Local Strategie Konfiguration:

var passport = require('passport'), 
    LocalStrategy = require('passport-local').Strategy, 
    User = require('mongoose').model('User'); 

module.exports = function() { 
    passport.use(new LocalStrategy({ 
     usernameField: 'email' 
    }, function (email, password, done) { 
     User.findOne({email: email}, function (err, user) { 
      if (err) { 
       return done(err); 
      } 

      if(!user || !user.active || !user.authenticate(password)) { 
       return done(null, false, { message: 'Authentication Failed'}); 
      } 

      return done(null, user); 
     }); 
    })); 
}; 

Alle anderen Methoden arbeiten, kann ich die DB abfragen, um den Benutzer zu finden, die ich durch Anpassung der Hash-Passwort verstärkt haben Mit dem mitgelieferten Passwort scheint alles in Ordnung zu sein und ich bekomme einen User am Ende der LocalStrategy (ich mache es zum finalen done(null, user). In der serializeUser()done(null, user.id) passiert etwas. Ich habe versucht durch i zu gehen t, aber was ich am Ende finde, scheint ziemlich verschleiert zu sein (oder ich bin zu dumm, es zu verstehen), also kann ich nicht sagen, was tatsächlich passiert.

+1

Es klingt wie der Aufruf von' passport.authentic ate() 'ist möglicherweise nicht richtig konfiguriert. Können Sie zeigen, wie Sie das verwenden? – robertklep

+0

Ich mache nichts Besonderes gibt: 'app.route ('/ login') \t \t .post (passport.authenticate ('local'));' Ich brauche keine Umleitung zu tun oder irgendetwas, ich brauche es nur, um das Benutzerobjekt zurück zum Frontend zu bringen. Eine Sache, die völlig zufällig sein könnte, vor kurzem die Node-Krypto 'pbkdf2Sync'-Funktion begann zu beschweren, dass der Aufruf ohne einen Digest veraltet war, also habe ich das hinzugefügt, und jetzt bin ich dabei. --edit gerade getestet, immer noch die gleiche Sache ... –

Antwort

1

Dies ist Ihre Route Setup:

app.route('/login').post(passport.authenticate('local')); 

Dies wird erzeugen ein 401 ("Unauthorized"), wenn die Authentifizierung fehlschlägt, aber wenn es gelingt, gibt es nichts als nächstes passieren konfiguriert, so dass Sie ‚ll ein bekommen 404.

Sie sollten einen expliziten "Erfolg" Handler zu Ihrer Route hinzufügen:

app.route('/login').post( 
    passport.authenticate('local'), 
    function(req, res) { 
    // This will only get called when authentication succeeded. 
    res.json({ user : req.user }); 
    } 
); 
+0

In diesem Szenario ist das Anfrageobjekt 'null'. Was auch immer im 'serializeUser()' passiert, bombardiert irgendwelche der Daten; –

+0

Also habe ich etwas mehr gegraben, bin auf 'connect-mongo' gestoßen. Ich habe dies verwendet, um meine Sitzung zu speichern, in der ich fand, dass die Passsitzung gespeichert wird ... also muss etwas in "serializeUser()" selbst ausgebootet werden (möglicherweise nach dem Aufruf, die Benutzerinformationen selbst zu serialisieren). Ich greife nach Pasports GitHub, um zu sehen, ob ich etwas finden kann. –

+0

Es muss noch etwas anderes passieren, ein anderes Projekt, das ich mit dem gleichen System habe, funktioniert nicht mehr. Es hat am Anfang der Woche gut funktioniert. Keine Paket-Updates oder so etwas ... Ich kann das auf meinem Heimcomputer noch einmal versuchen, um zu sehen, was dort passiert. –