Я работаю над проектом с помощью hapi-auth-jwt. Таким образом, когда пользователь регистрируется получить этот маркерHapi jwt extra auth check id владельца
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
мне интересно, если есть способ не ч пр мой код дублируется (вроде промежуточного слоя в экспресс)
Является ли это стоит использовать предварительный крюк как
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();
});
Вы можете использовать общий доступ к маршрутам http://hapijs.com/api#route-prerequisites, чтобы проверить право собственности –
@MattHarrison спасибо за то, что сейчас я в двух умах, используя onPostAuth или флаг pre. imo в этом случае onPostAuth кажется яснее, но ... – Whisher
Лично я бы пошел до. Это не глобальная логика, и она лучше документирована в конфигурации вашего маршрута, когда вы просматриваете код через год и пытаетесь понять, что происходит. –