/ / Es können keine Daten von einer Middleware zur nächsten Middleware in ExpressJS mit passport.athenticate () - node.js, express, passport.js übergeben werden

Daten können nicht von einer Middleware an die nächste Middleware in ExpressJS übergeben werden. Verwenden Sie dazu pass.athenticate () - node.js, express, pass.js

js und Passport.js. Also habe ich folgendes:

router.post("/login", middleware1, middleware2);

Ich habe das auch auf meiner app.js

passport.use(new passportLocal(
{ usernameField: "email" },
function(email, password, done) {
// working logic here
// this returns a user object
// to the middleware1 if query is ok
// returns error otherwise.
}
));

Und hier sind meine middlewares

middleware1 = function (req, res, next) {

passport.authenticate("local", function(error, user, message){

// How do I get the "user" object and pass it
// to the outer req or res?

req.user = user; // <- is this ok?
})(req, res, next);

req.user = user;

next();
}

middleware2 = function (req, res, next) {

console.log("user ", req.user); // <- this will obviously print null or undefined

}

Jetzt. Wie kann ich das übergeben? user object aus dem Inneren des passport.authenticate() zu middleware2. Ich denke darüber nach promise etwas wie das passport.authenticate().then() aber ich kenne die Syntax nicht. Bitte helfen Vielen Dank.

Antworten:

0 für die Antwort № 1
  app.post("/login",
passport.authenticate("local"),
function(req, res) {
// If this function gets called, authentication was successful.
// `req.user` contains the authenticated user.
res.redirect("/users/" + req.user.username);
});

Die Funktionssignatur von authenticate () ist die Standard-Middleware von Connect, was die Verwendung als Routen-Middleware erleichtert

Warum verpacken Sie passport.authenticate () in eine andere Funktion?

Ich bin nicht sicher, was Sie zu tun versuchen, aber ich würde wahrscheinlich ohne die Fehlleitung beginnen

router.post("/login", passport.authenticate("local"), middleware2(req,res,next));

function middleware2(req,res,next) {
console.log("user ", req.user);
}

Wenn das Req-Objekt an Ihre Funktion übergeben werden soll, setzen Sie die Pass-js-Optionen "passReqToCallback: true".