use*_*560 6 node.js express angularjs
我正在使用JSON Web令牌进行身份验证的MEAN应用程序.基本上每个请求,我都在检查用户是否有有效的令牌.如果是这样,他们可以进入路线,否则他们将返回登录页面.
我想让某些路由/ admin/etc ...只能由也是admin的登录用户访问.我在mongo中设置了一个isAdmin标志.我是nodejs的新手,想知道检查这个的最佳方法是什么.我是否在路线的角度边做?或者我可以以某种方式创建基于权限的身份验证令牌?作为参考,我遵循MEAN机器书中的代码,特别是在这里 -
https://github.com/scotch-io/mean-machine-code/tree/master/17-user-crm
首先,授权决策必须在服务器端完成。按照您的建议在 Angular.js 的客户端执行此操作也是一个好主意,但这只是为了改善用户体验,例如不向用户显示指向他们无权访问的内容的链接。
使用 JWT,您可以在令牌中嵌入有关用户的声明,如下所示:
var jwt = require('jsonwebtoken');
var token = jwt.sign({ role: 'admin' }, 'your_secret');
Run Code Online (Sandbox Code Playgroud)
要将权限映射到快速路由,您可以使用connect-roles构建干净且可读的授权中间件函数。例如,假设您的 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();
}
});
})
Run Code Online (Sandbox Code Playgroud)
这样,您就可以在路由上强制执行授权策略,如下所示:
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();
})
Run Code Online (Sandbox Code Playgroud)
请注意,有更好的选项来发行和验证 JWT,例如 express-jwt,或将护照与passor-jwt结合使用
| 归档时间: |
|
| 查看次数: |
1343 次 |
| 最近记录: |