/ / 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が無傷になります。
たぶん私は何かを誤解したでしょうか?

P.S .:私は転記しています jQuery.post.

回答:

回答№1は5

あなたは、 カスタムコールバック あなたが持っているところ 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 値と私は値とエラーメッセージを渡すためにそれを使用することができます。