【发布时间】:2015-12-15 07:46:20
【问题描述】:
我正在做一个项目 使用 hapi-auth-jwt。 所以当用户登录时 获取此令牌
exports.getUserToken = function getUserToken(user) {
var userData = {
username: user.username,
scope: ['user'],
iss: apiConfig.iis,
jti: user.id
};
var token = {
token : Jwt.sign(userData, apiConfig.secret, { expiresInMinutes: apiConfig.expiresInMinutes})
};
return token;
};
在路上
{
method: 'GET',
path: internals.resourcePath + '/{userId}',
config : {
handler : User.findById,
validate: Validator.findById,
auth: {
strategy: 'token',
scope: ['user']
}
}
},
但我必须进行其他检查,例如 (在控制器中获取一个,更新和删除) 看看用户是否真的是所有者
var jti = request.auth.credentials.jti;
var id = +request.params.userId;
if( id !== jti ){
return reply( ReplyUtil.forbidden() );
}
var params =request.payload;
User.findOne
我想知道是否有办法不拥有 我的代码重复了(快递中的中间件)
是否值得使用 pre-hook 之类的
server.ext('onPostAuth' , function(request, reply) {
if(request.auth && request.auth.credentials && request.auth.credentials.jti){
var jti = request.auth.credentials.jti;
var id = +request.params.userId;
if( id !== jti ){
return reply(Boom.forbidden());
}
}
return reply.continue();
});
【问题讨论】:
-
您可以使用共享路由先决条件hapijs.com/api#route-prerequisites 来检查所有权
-
@MattHarrison 感谢这一点,现在我有两个想法,使用 onPostAuth 或 pre 标志。 imo 在这种情况下 onPostAuth 似乎更清晰,但是...
-
就个人而言,我会去。这不是全局逻辑,当您在一年内查看代码并尝试了解发生了什么时,它会更好地记录在您的路线配置中。
-
另一个原因是参数尚未在您的 onPostAuth 中验证,而它们将在 pre:hapijs.com/api#request-lifecycle
标签: hapijs