/ / passport.js - komunikat o błędzie dostępu po błędzie 401 - jquery, node.js, express, passport.js, http-status-code-401

passport.js - komunikat o błędzie dostępu po błędzie 401 - jquery, node.js, express, passport.js, http-status-code-401

Obecnie mogę uzyskać dostęp do ustawionych wiadomości done(null, user, {message: "ok"}) wewnątrz post request przez req.authInfolubię to:

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

Co jest bardzo przydatne.
Ale jak mogę uzyskać dostęp do wiadomości w ten sposób done(null, false, {message: "username taken"}) w ten sam sposób, jak się wydaje, że przechodzi done(null, false) w paszport.authenticate powoduje, że rzuca 401 bez reklam, dlatego nie przekazuje dalej obsługi trasy.
Może coś źle zrozumiałem?

P.S .: Przekazuję jQuery.post.

Odpowiedzi:

5 dla odpowiedzi № 1

Powinieneś użyć niestandardowe oddzwanianie gdzie masz info dostępny:

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 zostanie ustawiony tylko po pomyślnym zalogowaniu. Jeśli korzystasz z sesji, możesz użyć wiadomości flash z przekierowaniami, np .:

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

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

1 dla odpowiedzi nr 2

Każdy ma swój własny sposób realizacji. W mojej implementacji, jeśli nie ma błędów i logowanie się powiodło, to:

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

Natomiast jeśli wystąpi jakikolwiek błąd lub nieudane logowanie, to też

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

lub

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

Dzięki temu moja praca staje się prostsza, ja tylko sprawdzam type wartość i mogę go używać do przekazywania wartości, a także komunikatów o błędach.