node.js / angular.js管理员授权路由



我正在使用使用JSON Web令牌进行身份验证的平均应用程序。基本上,在每个请求上,我都在检查以查看用户是否具有有效令牌。如果是这样,他们可以通行到路线,否则将返回登录页面。

我想进行某些路线/admin/等...仅适用于登录的用户也可以访问。我已经在Mongo设置了Isadmin Flag。我是Nodejs的新手,想知道检查此问题的最佳方法是什么。我在路线上的角度上做吗?还是我可以以某种方式创建基于权限的身份验证代码?作为参考,我正在遵循均值机器书中的代码,特别是在这里 -

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

首先,授权决策必须在服务器端完成。正如您建议的那样,在Angular.js的客户端进行操作也是一个好主意,但这仅是为了改善用户的体验,例如,不向用户显示与他们无法访问的内容的链接。

使用JWTS,您可以在令牌内嵌入有关用户的主张,例如:

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

要映射权限以表达路由,您可以使用连接功能来构建干净且可读的授权中间件功能。假设您的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();
})

请注意,发行&验证JWT,例如Express-JWT,或与Passort-Jwt一起使用Passport

最新更新