多个Passport LocalStrategies

我们正在开发一个电子商务网站在那个pipe理员和用户表在这里,我们正在validationpipe理员和用户,如果他是pipe理员,那么他可以访问pipe理网站,他可以利用pipe理的好处,如果不是他不能login到pipe理网站

因为我们的路由代码是

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'); }); 

在上面的代码authenticationif(req.isAuthenticated)(){条件它自我不工作的pipe理和用户集合是不同的performance在我能做什么

你可以通过使用两个不同的LocalStrategy来对用户和pipe理员进行不同的身份validation(对于不同的表格)。

就像是 :

 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' }));