3

Web アプリ用のセッションベースの認証を構築しようとしています。次の認証機能があります。

function authenticate(req, res) {
  var body = req.body;

  getAuthUser(body.username, function (err, result) {

      if (hash(body.password) != result.password) {
          // invalid pass
          return;
      }

      req.session['user'] = result;
      res.redirect('/logged/panel');

      console.log(req.session); // 'user' session is displayed here
  });
}

セキュリティで保護されたコンテンツにアクセスするときにユーザーが認証されるようにするミドルウェアもあります。

function validateRequest(req, res, next) {
  console.log(req.session); // 'user' session is not displayed here
  (req.session.user) ? next() : res.redirect('/login');
}

問題は、ミドルウェアが関数によって保存された変数を認識しないことですauthenticate。前もって感謝します。

編集:

これが私のミドルウェアの使用方法です。

router.use(validateRequest);
4

1 に答える 1

2

範囲外reqであるため、他の関数にはありません。req をグローバル スコープに配置して、他の関数でアクセスし、他の関数でそれを参照すると、トップ フレームからのものではなくスコープ内で req が渡されます。global.req=reqglobal.req

req.session.userに設定される前にルーターが実行されていることがわかりましたresult

于 2015-04-27T07:22:57.110 に答える