2016-08-30 121 views
0

我目前使用slim與slim-jwt-auth。如何在使用jwt令牌時檢測用戶(Slim-jwt-auth)

我的項目基於slim-api-skeleton(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(「token」); if($ token-> sub!== $ user-> email)... – kip

相關問題