validationPassport.js中的访问/组
我想使用passport.js来validation,当用户碰到某些端点时,他们不仅拥有正确的密码,而且是特定组的成员或具有一定的访问权限。
为了简单起见,如果我有访问级别的用户和pipe理员。
我可以使用护照来validation密码:
passport.use(new LocalStrategy( function(username, password, done) { User.findOne({ username: username }, function(err, user) { if (err) { return done(err); } if (!user) { return done(null, false, { message: 'Incorrect username.' }); } if (!user.validPassword(password)) { return done(null, false, { message: 'Incorrect password.' }); } return done(null, user); }); } ));
然后用一个路线,我可以确保用户通过身份validation:
app.get('/api/users', passport.authenticate('local'), function(req, res) { res.json({ ... }); });
但是,让我们说你需要有一个ADMIN访问/ api / users'。 我需要写我自己的战略吗? IE我需要一个本地用户和本地pipe理策略,并在每个validation正确的访问级别?
我想我可以很容易地做到这一点,但是当我需要我的网站有不同的auth方法(可能有时使用oauth)时,问题就出现了,我需要为每个方法编写自定义的* -user,* -admin策略。 看起来像矫枉过正。
其他选项是在用户通过authentication之后,在每个路由中只validation访问/组。 但是如果可能的话,我宁愿在中间件中这样做。
谢谢
您可以创build一个简单的中间件来检查组:
var needsGroup = function(group) { return function(req, res, next) { if (req.user && req.user.group === group) next(); else res.send(401, 'Unauthorized'); }; }; app.get('/api/users', passport.authenticate('local'), needsGroup('admin'), function(req, res) { ... });
这假定存储在req.user
中的对象有一个属性group
。 这个对象是从策略实现和deserializeUser
传递来的。
替代scheme可能是连接angular色 ,但我不知道如何与护照集成。
编辑:你也可以结合护照和组检查中间件:
var needsGroup = function(group) { return [ passport.authenticate('local'), function(req, res, next) { if (req.user && req.user.group === group) next(); else res.send(401, 'Unauthorized'); } ]; }; app.get('/api/users', needsGroup('admin'), function(req, res) { });
- Node.js的承诺 – 不应该等到.then完成()?
- Node.js fs.writeFile:err返回null
- 如何使用dropbox.js将file upload到Dropbox?
- TypeError:无法在node.js中调用未定义的方法“toArray”,而在aggregatein mongo中
- GET http:// localhost:3000 / socket.io / socket.io.js 404(Not Found)
- node.js http-proxy如何根据请求设置超时和处理程序
- js / nodejs基本的初学者服务器,用于使用request.on()和querystring.parse()方法的POST方法
- 在Emacs的nodejs模式下得到垃圾提示
- 如何获取node-neo4j返回节点的数据只