Node.js / Angular.jspipe理员授权的路线

我正在使用JSON Web令牌进行身份validation的MEAN应用程序。 基本上每个请求,我正在检查,看看用户是否有一个有效的令牌。 如果是的话,他们可以通过该路线,否则返回到login页面。

我想要使​​某些路线/pipe理/等…只能访问login用户谁也是pipe理员。 我在mongo中设置了一个isAdmin标志。 我是nodejs的新手,想知道检查这个的最好方法是什么。 我是否在路线的angular度上做? 或者我可以以某种方式创build身份validation基于权限的令牌? 作为参考,我遵循MEAN机器书中的代码,特别是在这里 –

https://github.com/scotch-io/mean-machine-code/tree/master/17-user-crm

首先,授权决定必须在服务器端完成。 按照你的build议在Angular.js的客户端做这件事也是一个好主意,但这只是为了改善用户的体验,例如不向用户显示他们无法访问的东西的链接。

使用JWT,您可以在令牌中embedded关于用户的声明,如下所示:

var jwt = require('jsonwebtoken'); var token = jwt.sign({ role: 'admin' }, 'your_secret'); 

要映射权限来表示路由,可以使用connect-roles来构build干净可读的授权中间件function。 假设你的JWT是通过HTTP头发送的,你有以下(天真的)授权中间件:

 // Naive authentication middleware, just for demonstration // Assumes you're issuing JWTs somehow and the client is including them in headers // Like this: Authorization: JWT {token} app.use(function(req, res, next) { var token = req.headers.authorization.replace(/^JWT /, ''); jwt.verify(token, 'your_secret', function(err, decoded) { if(err) { next(err); } else { req.user = decoded; next(); } }); }) 

有了这个,你可以在路由上执行你的授权策略,就像这样:

 var ConnectRoles = require('connect-roles'); var user = new ConnectRoles(); user.use('admin', function(req) { return req.user && req.user.role === 'admin'; }) app.get('/admin', user.is('admin'), function(req, res, next) { res.end(); }) 

请注意,发布和validationJWT的方法有很多,例如express-jwt ,或者将passport与passort-jwt结合使用