私の/app
ルートで2つのミドルウェアを使用しようとしていますが、そのルートではユーザー認証とそのアカウントの状態を確認します。私は両方のミドルウェアを用意していますが、req.session.accountStatus
が私がそれを提供した条件と等しくない場合、私は無限のリダイレクトに遭遇しています。一般的に、私はリダイレクトされているページへのアクセス権のみをユーザに強制しようとしています。ミドルウェアを間違った方法で使用していますか?より良いアプローチがありますか?ExpressJSミドルウェアリダイレクトが多すぎます
function isLoggedIn(req, res, next) {
if (req.isAuthenticated()){
return next();
}
res.redirect('/login');
}
function accountStatus(req, res, next) {
if(req.session.accountStatus == "active" || req.session.accountStatus == "trialing"){
return next();
} else {
//Endless loop. Need to fix
res.redirect('/app/settings/billing');
}
}
router.use(require('./site-routes'));
router.use('/app', isLoggedIn, accountStatus, require('./app-routes'));
これは素晴らしいソリューションです!うまくいけばあなたが答えるのを助けることができる2つの簡単な質問。 1. '/ login'は私の' site-routes.js'ファイルで定義されているルートです。 'app-routes.js' accountStatusミドルウェア内でこのルートにリダイレクトを追加したにもかかわらず、両方のファイルが' router'に '.use'で接続されているので、ルートを認識する必要があります。 2.私は '/ settings/billing'を' accountStatus'ミドルウェアに固定していますが、 'router'にアタッチされているため、グローバルにアクセス可能ですか? – cphill
1.はい。リダイレクトは、純粋にクライアントに別のページに移動するための指示です。そのページが存在する限り、動作するはずです。 Expressには、特別な処理はありません。 2.「ミドルウェアに固定」されていることを確認できません。 '/ app/settings/billing'が呼び出されたときに' accountStatus'ミドルウェアが呼び出されるべきではありません(少なくとも、それはあなたが望むものですか、それとも質問を誤解しましたか?)。 – robertklep
それはすべて意味がありません。手伝ってくれてどうもありがとう! – cphill