1

以下のミドルウェアでpassportjsを使用しています。ユーザーが特定のことを要求したときに、ユーザーがログインしているかどうかを確認することを想定しています。サインインしていない場合は、ログイン ページにリダイレクトする必要があります。

次のようなリクエストルートがあります。

app.put('/fantasyteams/:fantasyTeamId', auth.requiresLogin, fantasyteams.update);

このルートは、ユーザーが Web サイトで Fantasy Team というリソースを更新しようとしたときに呼び出されます。

auth.requiresLogin は、次のようなミドルウェアです。

exports.requiresLogin = function (req, res, next) {
  if (req.isAuthenticated()) {
    return next()

  }
  return res.redirect("/signin");
};

ユーザーにログインした後、セッション Cookie を削除して、セッションの有効期限をシミュレートしました。その後、Web サイトを通じて PUT '/fantasyteams/123' リクエストを送信し、ファンタジー チーム番号 123 を更新しました。

fantasyteams.update は、単に mongodb / mongoose 保存操作です。

exports.update = function(req, res){
    var fantasyteam = req.fantasyteam;
    fantasyteam = _.extend(fantasyteam, req.body);
    fantasyteam.save(function(err){
        res.jsonp(fantasyteam);
    });
};

予想通り、上記のルート ハンドラー (app.put ...) がリクエストをキャッチし、それを auth.requiresLogin ミドルウェアに渡して、ユーザーがログインしているかどうかを確認しました。彼のセッション クッキー。res.redirect は期待どおりに呼び出されます。ただし、Web サイトはサインイン ページにリダイレクトされません。これは、node.js コマンド ログに表示されます。

PUT /signin 404 328ms

私は何を間違えましたか?

4

1 に答える 1