特定のルートにアクセスするためのセッションを必要とするが、私はやってために持っているものこれは次のとおりです。Express.jsは、このためで構築されたものがある場合、私はわからない</p> <p>。特定のページには、ユーザーがログインする必要が私はアプリを持っている
これは正しい方法ですか、それとも良い方法がありますか?私がやっているやり方はちょっとハッキリだと感じています。
特定のルートにアクセスするためのセッションを必要とするが、私はやってために持っているものこれは次のとおりです。Express.jsは、このためで構築されたものがある場合、私はわからない</p> <p>。特定のページには、ユーザーがログインする必要が私はアプリを持っている
これは正しい方法ですか、それとも良い方法がありますか?私がやっているやり方はちょっとハッキリだと感じています。
このソリューションの作業。それは最善ではありませんが、小規模なプロジェクトにとっては良いことになります。唯一の欠点は、セッションで確認したいすべてのルートを定義する必要があることです。
Nodejsはミドルウェアの世界ですから、なぜそれを使用しないのですか?私はそれが最善のことだと思う。
を確認しますがあれば、私は私のミドルウェアをエクスポートし、私はすべての私のルータ上でそれを適用するファイル...(この場合には、それはユーザーがログインされているかどうかだけをチェックするのです)
var verify = require('./verify');
router.all('/*', verify.isLogged, function(req, res, next) {
if(req.decoded._doc.isLogged == "") {
next();
}
else {
res.json("error");
}
});
この方法で、ありますあなたは
router.get('/test', verify.isLogged, verify.isAdmin function(req, res, next) {
if(req.decoded._doc.isAdmin == "") {
next();
}
else {
res.json("error");
}
});
を確認したい場所を一つのことをチェックする必要があり、今後、その後、別の一つに、あなただけのあなたを呼び出す必要がありますはい、それはそれをやっての正しい方法です機能。あなたが持っているのはアプリケーションレベルのミドルウェアの中にexpress
です。アプリケーションが受け取る要求ごとに呼び出されます。
あなたはusername
チェックを抽出し、ルートミドルウェアsubstackとしてそれを適用することができます。このようにして、ミドルウェアは適用されたルートに対してのみ実行されます。
function gatePass(req, res, next) {
if(req.session.username) {
next();
}
else {
return res.redirect('/');
}
}
app.get('/project/create', gatePass, projectCtrl.create)
app.get('/project/create/save', gatePass, projectCtrl.save)
あなたがを使用して懸念を分離するために気に入るだろう場合は、少しこれをさらに取ることができルートレベルのミドルウェアと一緒にルータを表現。これはミドルウェアをルートに直接適用します。
var router = express.Router();
router.use('/project/create', gatePass);
router.use('/project/create/save', gatePass);
router.get('/project/create', projectCtrl.create);
router.get('/project/create/save', projectCtrl.save);
app.use('/', router);
これは作業には近づきません。それ以降はサーバーへの最初のリクエストがうまくいかない可能性があります。 – jfriend00