/ / passport.js - 401 त्रुटि के बाद एक्सेस असफल संदेश - jquery, node.js, express, passport.js, http-status-code-401

passport.js - 401 त्रुटि के बाद एक्सेस असफल संदेश - jquery, node.js, express, passport.js, http-status-code-401

वर्तमान में मैं सेट किए गए संदेशों तक पहुंच सकता हूं done(null, user, {message: "ok"}) के माध्यम से पोस्ट अनुरोध के अंदर req.authInfoइस तरह:

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

जो बहुत उपयोगी है।
लेकिन मैं इस तरह के संदेश का उपयोग कैसे कर सकता हूं done(null, false, {message: "username taken"}) उसी तरह, जैसा कि ऐसा लगता है कि गुजर रहा है done(null, false) passport.authenticate में यह 401 unathorised फेंक देता है, इसलिए मार्ग हैंडलर को खुद को अग्रेषित नहीं करता है।
शायद मैं कुछ गलत समझा?

पीएस .: मैं "के माध्यम से पोस्ट कर रहा हूँ jQuery.post.

उत्तर:

जवाब के लिए 5 № 1

आपको उपयोग करना चाहिए कस्टम कॉलबैक आपके पास कहां है info सुलभ:

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 सफल लॉगिन के बाद ही सेट हो जाता है। यदि आप सत्र का उपयोग कर रहे थे तो आप रीडायरेक्ट के साथ फ्लैश संदेश का उपयोग कर सकते हैं, उदाहरण के लिए:

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

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

उत्तर № 2 के लिए 1

हर किसी के पास इसे लागू करने का अपना तरीका है। मेरे कार्यान्वयन में यदि कोई त्रुटि नहीं है और लॉगिन सफल है तो:

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

जबकि अगर कोई त्रुटि या असफल लॉगिन तो मैं करता हूं

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

या

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

तो यह मेरा काम आसान बनाता है, मैं केवल जांचता हूं type मूल्य और मैं मानों के साथ-साथ त्रुटि संदेशों को पारित करने के लिए इसका उपयोग कर सकता हूं।