/ / pass.js - Zugriffsfehlermeldung nach 401 Fehler - jquery, node.js, express, pass.js, http-status-code-401

pass.js - Zugriffsfehlermeldung nach 401 Fehler - jquery, node.js, express, pass.js, http-status-code-401

Zur Zeit kann ich auf Nachrichten zugreifen, die in eingestellt sind done(null, user, {message: "ok"}) Inside Postanfrage über req.authInfoso was:

app.post("/reg", passport.authenticate("local-reg", { session: false }), function (req, res) {
console.log(req.authInfo.message); --> "ok"
});

Was sehr nützlich ist.
Aber wie kann ich auf diese Nachricht zugreifen? done(null, false, {message: "username taken"}) in der gleichen Weise, wie es scheint, dass es vorbei ist done(null, false) in pass.authenticate bewirkt, dass 401 unmoralisch ausgelöst wird und daher nicht an den Routenhandler selbst weitergeleitet wird.
Vielleicht habe ich etwas falsch verstanden?

PS .: Ich schreibe durch jQuery.post.

Antworten:

5 für die Antwort № 1

Du solltest benutzen benutzerdefinierter Rückruf Wo du hast info zugänglich:

app.post("/req", function(req, res, next) {
passport.authenticate("local-reg", {session: false}, function(err, user, info) {
if (err) {
return next(err);
}
if (!user) {
return res.json(info);
}
req.logIn(user, function(err) {
if (err) {
return next(err);
}
return res.json(info);
});
})(req, res, next);
});

req.authInfo wird erst nach erfolgreicher Anmeldung gesetzt. Wenn Sie Sitzungen verwenden, können Sie Flash-Nachrichten mit Weiterleitungen verwenden, z.

app.post("/reg", passport.authenticate("local-reg", {
successRedirect: "/",
failureRedirect: "/",
failureFlash: true,
successFlash: true
}));

app.get("/", function(req, res) {
res.json(req.flash());
});

1 für die Antwort № 2

Jeder hat seine eigene Art, es zu implementieren. In meiner Implementierung, wenn keine Fehler vorliegen und die Anmeldung erfolgreich ist, dann:

return done(null, {type : true, data: {email: <some email>, role : <some role>, name: <some name>}, token : <some token>});

Während wenn irgendein Fehler oder erfolgloser Login dann tue ich entweder

return done(null, {type : false, data: "Email is already taken."});

oder

return done(null,{type:false, data: err})

Das macht meine Arbeit einfacher, ich überprüfe nur die type Wert und ich kann es verwenden, um Werte sowie Fehlermeldungen zu übergeben.