Как обрабатывать проверку подлинности Slim API JWT

Я уже сгенерировал токен из своего входа в api с помощью этого кода:

    if ($isCorrect == 1) {
        $key = "example_key";
        $token = array(
            "iss" => "http://mywebsite.com",
            "iat" => 1356999524,
            "nbf" => 1357000000,
            'data' => [                  
                'userName' => $UserName,
            ]
        );

        $jwt = JWT::encode($token, $key);
        $decoded = JWT::decode($jwt, $key, array('HS256'));

        $unencodedArray = ['jwt' => $jwt];
        echo json_encode($unencodedArray);
    }

Теперь у меня есть маркер, как я могу использовать маркер для другого api? Я имею в виду, что я не хочу, чтобы кто-то выполнял этот api без входа в систему.

Это мой пример метода API:

$app->get('/api/user/{UserId}', function($request){ 
//Select query here
});

Это библиотека, которую я использовал: https://github.com/firebase/php-jwt

Большое спасибо за помощь.

1 ответ

  1. Вам просто нужно добавить метод middleware для вашего API
    это проверит проверку токена JWT с этим именем пользователя
    Затем передайте запрос API

    `

     $app->add( function ( $Req ,$Res ,$next ){
           //get token,username from the user 
        $token= $Req->getParsedBodyParam('token');
        $user_name=$Req->getParsedBodyParam('username');
        //check for empty of any of them
        if(empty ($token)|| empty($user_name)  ){
        $message=array("success"=>false,'message'=>'Some data is empty');
        return $Res->withStatus(401)
                   -> withJson($message);
        }
        else{ 
    
        //Validation test for the taken for this user name 
                    $decoded_token = $this->JWT::decode($token, 'YourSecret key', array('HS256'));
                    if( isset($decoded_token->data->userName) && $decoded_token->data->userName == $user_Name ){
                   $message=array('message'=>'the token is valid');
    //pass through the next API 
                     $Res=$next($Req,$Res->withJson($message));
                   return $Res;
                    }
                    else{
        $message=array("sccess"=>false,"message"=>"Token Validation Error",'code'=>201);
        return $Res->withStatus(401)
                ->withJson($message);
                    }
        }
        });
        `