0

私はpassport-local-mongooseを使用しており、リポジトリのログイン例を使用して簡単な作業例を設定しようとしています。しかし、問題が発生し、「エラー:ユーザーをセッションにシリアル化できませんでした」というエラーメッセージが表示されます。

問題を要点で再現しました。(要点を実行するには、user.jsファイルのmongodbサーバーのIPとデータベース名を置き換え、/ registerエンドポイントに値を使用してPOSTを実行する必要がusernameありpasswordます。)

その中に、セッションに値を設定して取得するエンドポイント'/setval'と'/ getval'が表示され、セッションサポートが機能していることが示されます。エンドポイント「/authtest」は、「/ login」にPOSTを実行した後でも、不正な応答を返します。エンドポイント「/authdebug」はより多くの情報を提供します-上記のエラー。

誰が何が起こっているのかについて何か考えがありますか?試すことが不足しています。

4

1 に答える 1

1

passport.authenticateこれは、実際にユーザーの認証に使用されるルートでのみ使用する必要があると思います。あなたの場合、それが/loginルートになります。

のように、ユーザーが以前に認証されていることを確認するルートの/authtest場合、ユーザーが認証されているかどうかをチェックするミドルウェアが必要です。

function ensureAuthenticated(req, res, next) {
  if (req.isAuthenticated()) {
    return next();
  }
  res.redirect('/login'); // or your login page
}
// and
app.get('/authtest', ensureAuthenticated, function(req, res) {
 ...
});

そのミドルウェアの代替手段は、connect-ensure-loginです。

于 2013-03-25T11:03:36.400 に答える