2

認証ミドルウェアを作成していますが、ログアウトに正常にログインすると、以前にアクセスしたページにリダイレクトされるはずです。完全な構成ブロックは次のとおりです。

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.static(__dirname + '/public'));
  app.use(express.bodyParser());
  app.use(express.cookieParser());
  app.use(express.session({ secret: '__YouDontKnow__', store: new RedisStore }));
  app.use(authCheck.run);
  app.use(express.methodOverride());
  app.use(app.router);
});

app.use(authCheck.run)が下にある場合app.use(express.session)、Expressはエラーをスローします。エラー:送信後にヘッダーを設定できません。

この呼び出しを上に移動すると、セッションが未定義app.use(express.session)であることを示す500エラーがスローされます。そして、私の認証機能はセッションオブジェクトに依存しています。

私に何ができる?

編集:これがauthCheck関数です:

exports.run = function (req, res, next) {
  var urlparser = GLOBAL.urlparser,
      url = req.urlp = urlparser.parse(req.url, true),

      goToLastPage = function() {
        var redirectUrl = (req.session.lastVisitedPage) ? req.session.lastVisitedPage : '/';
        console.log("goToLastPage(%s)", redirectUrl);
        res.redirect(redirectUrl);
        return;
      }

  // Log out
  if (url.pathname == '/user/logout') {
    req.session.destroy();
    console.log('User has logged out');
    goToLastPage();
  }

  // Log in
  if (url.pathname == '/user/login' && req.method == 'POST') {
    var email = req.body.login.email,
        password = req.body.login.password;

    req.session.auth = true;
    req.session.userId = 1;

    console.log('User has logged in');

    goToLastPage();
  }

  next();
  return;
}
4

1 に答える 1

8

を呼び出したreturn後にa を付けますgoToLastPage()next()チェーン内の次のミドルウェアを呼び出す呼び出しを行った後も呼び出しを続けres.redirectているため、最終的にルートの 1 つにヒットし、ヘッダーを設定しようとして失敗する可能性があります。

于 2012-06-22T04:22:19.437 に答える