2014-02-23 8 views
6

Ich konnte dies nicht nachverfolgen, aber für meine Einrichtung gibt isAuthenticated immer false zurück, auch nach einer erfolgreichen Anmeldung. Hier ist der Passcode:Passport und Passport Local req.isAuthenticated gibt immer false zurück

req.isAuthenticated = function() { 
    var property = 'user'; 
    if (this._passport && this._passport.instance._userProperty) { 
    property = this._passport.instance._userProperty; 
    } 

    return (this[property]) ? true : false; 
}; 

Aber in einem kurzen Blick um Ich sehe nicht die _userProperty proeprty überall in der lokalen Strategie (sorry, wenn ich nicht hart genug war), so nehme ich an, dass sein könnte, warum es kommt immer falsch zurück?

würde ich ein Codebeispiel meines Anwendungscode verlassen, aber ich glaube, es ist wahrscheinlich einfacher, einen kurzen Blick auf dem Repo hat für meine Arbeit in progress: passport api token sessionless

Letztlich ist mein Ziel Abmelde hat funktionieren ordnungsgemäß für dieses Boilerplate-Projekt (was es derzeit nicht tut).

Antwort

2

Entschuldigt, wenn meine ursprüngliche Frage in erster Linie nicht so nützlich ist, aber ...

Ich fand, dass meine Kombination von Pass, Pass-lokaler und Pass-local-Mungo, eine Lösung war einfach eine Ungültigkeits Methode auf meinem Mungo Schema erstellen (das die passportLocalMongoose „eingesteckt“ hat, und wenn meine /logout Route entferne ich im wesentlichen, dass die Benutzer-Token getroffen wird Hier ist diese Methode.

Account.statics.invalidateUserToken = function(email, cb) { 
    var self = this; 
    this.findOne({email: email}, function(err, usr) { 
     if(err || !usr) { 
      console.log('err'); 
     } 
     usr.token = null; 
     usr.save(function(err, usr) { 
      if (err) { 
       cb(err, null); 
      } else { 
       cb(false, 'removed'); 
      } 
     }); 
    }); 
}; 

ich nehme an, es ist mehr interessant zu sehen, dies im zusammenhang also bitte nochmal gerne auf das repo in der frageliste verweisen ... hoffe das er lps jemand.

Auch, wenn ein Kern von einer der oben genannten Bibliotheken einen besseren Weg vorschlagen möchte, würde ich natürlich gerne meinen Code umgestalten, um ihn idiomatisch zu machen; Wenn nicht, schien dieser Ansatz zu funktionieren.

8

Ich glaube, Sie vergessen zu setzen: req.login(...) innerhalb passport.authenticate('local', function(...){}).

See here (at the end of the page)

+0

Perfekt! Danke :) – Sohail

+0

Der angegebene Link sagt nichts über den Aufruf von login(). Tatsächlich heißt es, dass Authenticate es bereits aufruft. "Anmerkung: Die Middleware pass.authenticate() ruft automatisch req.login() auf. Diese Funktion wird hauptsächlich verwendet, wenn Benutzer sich anmelden, während req.login() aufgerufen werden kann, um sich automatisch anzumelden der neu registrierte Benutzer. " – Epirocks