/ / Impossibile passare i dati da un middleware al middleware successivo in ExpressJS utilizzando passport.athenticate () - node.js, express, passport.js

Impossibile passare i dati da un middleware al middleware successivo in ExpressJS utilizzando passport.athenticate () - node.js, express, passport.js

js e Passport.js. Quindi ho questo:

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

Anch'io ho questo sul mio 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.
}
));

E qui sono i miei 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

}

Adesso. Come faccio a passare il user object dall'interno del passport.authenticate() a middleware2. Sto pensando di usare promise qualcosa come questo passport.authenticate().then() ma non conosco la sintassi. Per favore aiuto. Grazie.

risposte:

0 per risposta № 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);
});

authenticate () La firma della funzione s è il middleware Connect standard, che lo rende comodo da utilizzare come middleware di route

Perché stai avvolgendo il passport.authenticate () in un'altra funzione?

Non sono sicuro di cosa stai provando a fare, ma probabilmente inizierei senza la deviazione

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

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

Se vuoi che l'oggetto req sia passato alla tua funzione imposta le opzioni del passport js "passReqToCallback: true"