我的feathers.js API中有一个用户服务。我想将find方法仅提供给已阅读:users范围集的经过身份验证的用户使用。
我使用express-jwt
作为身份验证的中间件。
我尝试使用express-jwt-authz
进行授权,但是由于req
在挂钩内不可用,所以无法使用。 express-jwt
库在req.user中设置作用域
用法JWT身份验证中间件使用 智威汤逊如果令牌有效,则将使用JSON对象设置req.user 解码后供以后的中间件用于授权和访问 控制。
有没有办法可以在钩子内访问access_token中的作用域?
我希望能够做这样的事情:
module.exports = {
before: {
all: [],
find: [ authorize(['read:users']) ],
get: [ authorize(['read:users'])],
create: [ authorize(['write:users']) ],
update: [ authorize(['write:users']) ],
patch: [ authorize(['write:users']) ],
remove: [ authorize(['write:users']) ]
}
};
答案 0 :(得分:1)
通过添加将req.user数据添加到req.feathers.scope的中间件解决了该问题。
我的src/middleware/index.js
文件
const addUserToReq = function(req, res, next) {
req.feathers.user = req.user; next();
};
module.exports = function (app) {
app.use(checkJwt); // express-jwt logic
app.use(addUserToReq);
};
然后在钩子中,我可以像这样访问此信息
module.exports = function(expectedScopes) {
return context => {
let scopes = context.params.user.scope;
}
};
};