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".