我目前正在使用Slim with slim-jwt-auth。
我的项目基于纤细的骨架(https://github.com/tuupola/slim-api-skeleton)。 我只需要为创建令牌的用户提供路由。
我已使用以下代码完成此操作:
//check if it is the right user
$user = \User::find($args["uid"]);
$token = $request->getHeader('HTTP_AUTHORIZATION');
$token = str_replace("Bearer ", "", $token);
$secret = getenv("JWT_SECRET");
$decoded = JWT::decode($token[0], $secret, array("HS256"));
if ($decoded->sub != $user->email)
{
throw new ForbiddenException("User not allowed to read.");
}
这是对的吗?或者有更好的方法吗?
答案 0 :(得分:0)
这是一种方法。虽然我不会手动解析令牌。默认情况下,JWT的解析值存储在$request->token
属性中。使用此功能,您可以将代码缩短为以下内容。
$app->get("/user/{uid}", function ($request, $response, $arguments) {
$user = \User::find($arguments["uid"]);
$token = $request->getAttribute("token");
if ($token->sub !== $user->email) ) {
throw new ForbiddenException("User not allowed to read.");
}
});
您可以使用attribute设置更改此行为。