Nodejs

2016-12-27 8 views
0

で複数のユーザーの役割を確認するために「)(passport.isAuthenticated」を使用すると、ここに私のisAuthenticated機能です:Nodejs

var isAuthenticated = function (req, res, next) { 
if (req.isAuthenticated()) return next(); 
    res.redirect('/'); 
}; 

そして、ここではPassportJsにisAuthenticated()機能を使用してビューをレンダリングするためのルートです。

router.get('/', isAuthenticated, function (req, res, next) { 
    res.render('dashboard'); 
}); 

このisAuthenticated機能は、ログインしているすべてのユーザーのビューを表示します。同様に、私は他のいくつかのビューには管理者しかアクセスできないようにしたい。この場合、別の戦略や機能を作成するのではなく、これを達成するために同じ機能を使用できますか?

isAuthenticated関数のパラメータとしてuserロールを指定し、要求内のユーザオブジェクトがパラメータで指定されているのと同じ役割を持っているかどうかをチェックする関数内で追加チェックをしますか?または別の別の機能/戦略を書くことを避けるための他の同様の方法ですか?また、好ましい方法は何ですか?&ベストセラーですか?もし誰かが詳細に説明できるのであれば、私は感謝します。

答えて

1

パスポートは、セッション中にユーザー情報を格納し、ユーザーをシリアライズとデシリアライズするために、これらの2つのセッションを使用して、あなたの認証機能インサイド

passport.serializeUser(function (req, user, done) { 
    //Check user permission here and assign to user object. 
    //user.permission = "user_permission" 
    return done(null, user); 
}); 

passport.deserializeUser(function (req, user, done) { 
    done(null, user); 
}); 

あなたは

var isAuthenticated = function (req, res, next) { 
    if (req.isAuthenticated()){ 
    if(req.user.permission === 'user_permission'){ 
     //route for admin 
    }else{ 
     //rote for non-admin 
    } 
    }else{ 
    res.redirect('/'); 
    } 
}; 
+0

おかげで、としての権限をチェックしますが、私ができビットの混乱があると思う。 'isAuthenciated'は、認証されたユーザだけがアクセスする必要があるすべてのルートに対してミドルウェアとして使用するグローバルな関数です。ページ(ダッシュボードなど)があり、管理者だけがアクセスできるので、ここで同じ機能を使用するにはどうすればいいですか? – adi

+0

isAuthenticatedは、ユーザーがWebサイトにアクセスするために認証されているかどうかをチェックし、ユーザーがその特定のページにアクセスできるかどうかを確認する権限をもう一度確認します。 –

+0

「profile」と「dashboard」の2つのルートがあり、ログインしているすべてのユーザーに 'profile'ルートへのアクセス権を与えたいが、adminユーザーだけが' dashboard'ルートにアクセスできます。どちらの場合も、同じ 'isauthenticated'関数をどのように使用できますか? – adi