は、私は、Express持っているとパスポートはそうのように構成:passport.deserializeUser()でエラーを処理するにはどうすればよいですか?
var db = require("./database.js"); // exports models e.g. db.User
passport.deserializeUser(function(id, done) {
db.User.findById(id).then(function (user) {
done(null, user);
}).catch(function (err) {
done(err, null);
});
});
:
var express = require("express");
var site = express();
var flash = require("connect-flash");
var passport = require("passport");
site.use(require("cookie-parser")());
site.use(require("body-parser").urlencoded({extended:false}));
site.use(require("express-session")(...));
site.use(flash());
site.use(passport.initialize());
site.use(passport.session());
は、私は(私は本棚を経由してのMySQLに裏打ちされたlocal
認証を使用しています)deserializeUser
のかなりの株式の実装を持っています
私は次の特定の問題に取り組んでいます。ログインしたユーザーがデータベースから削除されたとき(サイト管理者がユーザーを削除したときなど)に、デシリアライズが期待どおりブックシェルフのCustomError("EmptyResponse")
で失敗します。しかし、私はそれをどのように扱うべきか分かりません。 done(err, null)
最終的には、エラーメッセージとスタックトレースがHTMLとしてクライアントに返されます。
質問:エラーの場合、deserializeUser
からカスタムの優雅なエラー処理をどうやって行うことができますか?それは物事を単純化した場合
今、私は私の代わりに、エラーのnull
ユーザーを与えるためにdb.User.findById
コールに{require:false}
を追加することができますが、私はまだそれを処理する方法がわからない(とも私はまだする必要がありますかデータベースサーバがダウンして接続エラーが発生した場合など、エラーオブジェクトを処理します。
私が失敗した場合の対処方法は、ログインページにユーザをリダイレクトすることです(潜在的に説明的なフラッシュメッセージが表示されますが、deserializeUser
のリクエスト/レスポンスへのアクセス権がありません)。どのように返信するか。 Passport docs "Configure" sectionで
あなただけのエラー( 'err.message')内のメッセージをチェックし、ユーザーのために良さそうに見えますいくつかのカスタム応答を返送することはできますか? ( 'catch'コールバックで) –
@ JoshBeamそれは私がやりたいことですが、そこからどのように応答オブジェクトにアクセスするのですか? 'deserializeUser'にパラメータとして渡されません。 –