/ / passport.js - Chyba prístupu po chybe 401 - jquery, node.js, express, passport.js, http-status-code-401

passport.js - Chyba prístupu po chybe 401 - jquery, node.js, express, passport.js, http-status-code-401

V súčasnosti môžem pristupovať k nastaveným správam done(null, user, {message: "ok"}) vo vnútri pošty požiadavku cez req.authInfoako toto:

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

Čo je veľmi užitočné.
Ale ako môžem pristupovať k takejto správe done(null, false, {message: "username taken"}) rovnakým spôsobom, ako sa zdá, že prechádza done(null, false) v passport.authenticate umožňuje hádzať 401 neoprávnené, a preto nepredávať obsluhe trasy sám.
Možno som niečo nepochopil?

P.S .: Prestupujem jQuery.post.

odpovede:

5 pre odpoveď č. 1

Mali by ste používať vlastné spätné volanie kde máte info prístupný:

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 nastaví sa len po úspešnom prihlásení. Ak ste používali relácie, mohli by ste použiť flash správy s presmerovaním, napr .:

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

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

1 pre odpoveď č. 2

Každý má svoj vlastný spôsob implementácie. V mojej implementácii, ak nie sú žiadne chyby a prihlásenie je úspešné potom:

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

Zatiaľ čo v prípade nejakej chyby alebo neúspešného prihlásenia potom aj ja

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

alebo

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

Takže to zjednodušuje moju prácu, len kontrolujem type a môžem ho použiť na zadávanie hodnôt, ako aj chybových správ.