web-dev-qa-db-ja.com

Express.js 4のres.status(401)をリダイレクトにチェーンする

要求しているユーザーが認証されていない場合は401の応答コードを送信したいのですが、要求がHTML要求であった場合にもリダイレクトしたいと思います。 Express 4ではこれが許可されていないことがわかりました。

res.status(401).redirect('/login')

誰かがこれを処理する方法を知っていますか?基本的に2つのヘッダーを渡すように要求しているので、これはExpressの制限ではない可能性がありますが、なぜそうなるのかわかりません。 「認証されていない」応答を渡し、ユーザーを一度にリダイレクトできるはずです。

14
brock

私は同じ問題に陥り、この種の仕事を処理するためにセッションを使用することにしました。

中間的な見方はしたくなかった...

以下のコードで、401の無許可のコードでレンダリングされるホームページにリダイレクトできます。

app.get('patternForbiddenRoute', (req, res, next) => {
       // previousCode
       if (notForbidden === true) {
           return res.render("a_view");
       }

       req.session.httpCode = 401;

       res.redirect('patternHomeRoute');
});

app.get('patternHomeRoute', (req, res, next) => {
       res.render("my_home_view", {}, (error, html) => {
            // ... handle error code ...

            const httpCode = req.session.httpCode;
            if (httpCode !== undefined) {
                delete req.session.httpCode;
                res.status(httpCode);
            }

            res.send(html);
       }));
});
0
BENARD Patrick