2016-07-17 16 views
0

erbte ich ein Code-Basis, wo es sieht aus wie sie Middleware in Knoten mit dem folgenden Muster für OAuth2 Pass StrategieNodeJS Codemuster => Express Middleware/OAuth2/Pass

module.exports = function (router) { 
    router.get('/', function (req, res, next) { 
     passport.authenticate('type', object, function(err, info) { 

      //pass info object to next middleware 

    })(req,res,next) <---where does this go?!? 
}) 
} 

Aus meiner aktuellen Verständnis der Codebasis laufen , das ist tatsächlich der letzte Funktionsaufruf in der Middlewarekette, also könnte ich einfach ein Stück Middleware zu der Unterseite hinzufügen?

Hört sich das nach der richtigen Idee an?

Und nur um zu klären, was ich versuche zu tun: zum req, indem Sie es Middleware-Funktion

  1. Passdaten von Oauth Rückruf durch
  2. durchführen DB Business-Logik (erstellen oder Lookup-Konto)
  3. Login mit JWT

Antwort

0

Dies scheint die "custom Rückruf" Verfahren zur Verwendung passpor Umleitung zu sein t's authenticate Funktion. Wenn Sie sich die the documentation ansehen, können Sie sehen, wie sie es erwarten. Das heißt, ich weiß nicht, was das zweite Argument tun soll (die object) - es sieht aus wie eine Variable, aber ich sehe es nirgendwo definiert, und ich bin mir nicht sicher, ob die Methode authenticate Argumente in nimmt diese Art und Weise. Außerdem benötigt der benutzerdefinierte Rückruf drei Argumente: err, user und danninfo ... die Sie stolpern könnten.

Okay, also jetzt zu Ihrer eigentlichen Frage "Könnte ich nur ein Stück Middleware an den Boden hinzufügen?" Irgendwie? Tatsache ist, dass Sie sich zu diesem Zeitpunkt in einer Routing-Middleware befinden. Wenn es übereinstimmt und Auth ist erfolgreich, dann sollten Sie tun, was Code für diese Route erforderlich ist innerhalb der benutzerdefinierten Rückruf. Das ist der Sinn dieser Art, Dinge zu tun. . Alternativ Sie passport.authenticate als ein Stück Middleware selbst (es gibt eine Middleware-Funktion verwendbar im Commonjs Muster verwenden könnten

Wenn Sie möchten, den Code nicht ändern, dann könnte man einfach tun:

module.exports = function (router) { 
    router.get('/', function (req, res, next) { 
    passport.authenticate('PICK A VALID TYPE', function(err, user, info) { 

     // this custom callback will be executed once auth completes 
     // (either successfully or not 

     // put code in here to perform DB business logic, login, and redirect 

    })(req,res,next); <--- this executes the passport.authenticate middleware 
    }) 
};