首先,授权决定必须在服务器端完成。按照您的建议在Angular.js的客户端上做这件事也是一个好主意,但这只是为了改善用户的体验,例如不向用户显示他们无权访问的链接。
随着JWTs,你可以嵌入有关令牌里面的用户声明,就像这样:
var jwt = require('jsonwebtoken');
var token = jwt.sign({ role: 'admin' }, 'your_secret');
要地图的权限来表达的路线,你可以使用connect-roles打造干净,可读授权中间件功能。假设例如您的智威汤逊在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();
})
请注意,发行&验证JWT有更好的选择,如express-jwt,或使用passport与passort-jwt