2016-08-30 2 views
0

В настоящее время я использую Slim с slim-jwt-auth.Как определить пользователя при использовании токена jwt (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

Это один из способов сделать это. Хотя я бы не разобрал токен вручную. По умолчанию разобранные значения 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.

+0

Спасибо ... это работает. Я только что изменил способ получить токен, потому что прямое использование $ request-> token-> sub не работает для меня. Итак, я использовал следующий способ: $ token = $ request-> getAttribute ("токен"); if ($ token-> sub! == $ user-> email) ... – kip