2016-08-30 15 views
0

私は現在slim-jwt-authでSlimを使用しています。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

これはそれを行う方法の1つです。私は手動でトークンを解析しませんが。デフォルトでは、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

関連する問題