2016-12-02 16 views
1

私たちは電子商取引のWebサイトを開発しています。そこには管理者とユーザーの表があります。管理者であればユーザーを認証します。管理者であればadminサイトにアクセスできます。彼は、自分が管理者とユーザーのコレクションが 今何ができるの異なるテーブルです働いていないことを条件付ける認証if(req.isAuthenticated)(){私たちのルーティングコードは、上記のコードで複数のPassport LocalStrategies

function ensureAdmin(req, res, next){ 
    console.log("reached :"); 
    if(req.isAuthenticated()){ 

     if (req.admin.role == 'admin') 
     { 

     return next(); 
     } 
     else { 
     req.logout(); 
     res.redirect('/admin'); 
     } 

    } 
    else { 

     res.redirect('/admin'); 
    } 
} 

router.post('/admin/login', passport.authenticate('admin', {successRedirect:'/admin/dashboard',failureRedirect:'/admin',failureFlash: true}), function(req, res) { 
    res.redirect('/admin/dashboard'); 
}); 

であるため、管理サイト

にログインすることができないではありません私do

答えて

4

2つの異なるLocalStrategieを使用して、異なるユーザーの場合と異なる方法で異なるユーザーと管理者を認証できます。

のような何か:

passport.use('user', new LocalStrategy( //'user' strategy 
    function(username, password, done) { 
    User.findOne(/* ... */) 
    } 
)); 

passport.use('admin', new LocalStrategy(//'admin' strategy 
    function(username, password, done) { 
    Admin.findOne(/* ... */) 
    } 
)); 

    //user login, uses the 'user' strategy 
     app.post('/user/login', 
     passport.authenticate('user', { successRedirect: '/user/home', failureRedirect: '/user/login' })); 


    //Admin login, uses the admin strategy 
    app.post('/admin/login', 
     passport.authenticate('admin', { successRedirect: '/admin/dashboard', failureRedirect: '/admin/login' }));