2017-08-08 9 views
1

特定のルートにアクセスするためのセッションを必要とするが、私はやってために持っているものこれは次のとおりです。Express.jsは、このためで構築されたものがある場合、私はわからない</p> <p>。特定のページには、ユーザーがログインする必要が私はアプリを持っている

これは正しい方法ですか、それとも良い方法がありますか?私がやっているやり方はちょっとハッキリだと感じています。

+0

これは作業には近づきません。それ以降はサーバーへの最初のリクエストがうまくいかない可能性があります。 – jfriend00

答えて

0

このソリューションの作業。それは最善ではありませんが、小規模なプロジェクトにとっては良いことになります。唯一の欠点は、セッションで確認したいすべてのルートを定義する必要があることです。

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"); 
    } 
}); 
1

を確認したい場所を一つのことをチェックする必要があり、今後、その後、別の一つに、あなただけのあなたを呼び出す必要がありますはい、それはそれをやっての正しい方法です機能。あなたが持っているのはアプリケーションレベルのミドルウェアの中に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); 
関連する問題

 関連する問題