39

Web アプリのユーザーが URL を入力したときの承認を確認したいと考えています。しかし、個別のミドルウェアを使用して承認を確認すると、次のような既存のルートには役に立ちません。

function authChecker(req, res, next) {
    if (req.session.auth) {
        next();
    } else {
       res.redirect("/auth");
    }
}

app.use(authChecker);
app.get("/", routes.index);
app.get("/foo/bar", routes.foobar);

authCheckerは、2 つの URL を入力したユーザーの権限を確認できません指定されていない URL に対してのみ機能します。

そして、次のように、ルートとルート ハンドラの間にauthCheckerを配置できるメソッドを見ました。

app.get("/", authChecker, routes.index);

しかし、すべてのルートに authChecker を配置するのではなく、簡単な方法でそれを達成するにはどうすればよいですか?

4

3 に答える 3

40

に限って

app.use(authChecker);

前です

app.use(app.router);

リクエストごとに呼び出されます。ただし、 /authを含むALL ROUTESに対して呼び出されているため、「リダイレクトが多すぎます」というメッセージが表示されます。したがって、これを回避するには、関数を次のように変更することをお勧めします。

function authChecker(req, res, next) {
    if (req.session.auth || req.path==='/auth') {
        next();
    } else {
       res.redirect("/auth");
    }
}

この方法では、認証 URL もリダイレクトされません。

于 2013-09-18T15:05:31.133 に答える