Ошибка при создании токена с JWT - PullRequest
0 голосов
/ 19 мая 2018

Я создаю API, но я получаю ошибку Uncaught при создании моего токена с JWT, когда я запускаю вызов post man, я получаю в своем журнале ошибок трассировку стека:

#0 [internal function]: Api->generateToken()
#1 /home/osconliz/public_html/Osconlizapicall/rest.php(42): ReflectionMethod->invoke(Object(Api))
#2 /home/osconliz/public_html/Osconlizapicall/index.php(4): Rest->processApi()
#3 {main}
thrown in /home/osconliz/public_html/Osconlizapicall/api.php on line 36
[19-May-2018 02:04:47 UTC] PHP Fatal error:  Uncaught Error: Class 'JWT' not found in /home/osconliz/public_html/Osconlizapicall/api.php:36
Stack trace:
#0 [internal function]: Api->generateToken()
#1 /home/osconliz/public_html/Osconlizapicall/rest.php(42): ReflectionMethod->invoke(Object(Api))
#2 /home/osconliz/public_html/Osconlizapicall/index.php(4): Rest->processApi()
#3 {main}

, но когдаЯ проверяю свой файл jwt на моем PHP-сервере, в нем есть класс JWT.

**jwt.php** страница с снимком экрана класса jwt

Затем страница, которую я использую для создания токена, **api.php**

// SECRETE_KEY - константа для создания прохода для JWT

   <?php 
  class Api extends Rest {
    public $dbConn;  

     public function __construct(){
        parent::__construct();  
        $db = new DbConnect;
        $this->dbConn = $db->connect();

    }

    public function generateToken(){
        $client_id_key = $this->validateParameter('client_id_key', $this->param['client_id_key'], STRING);
        //$client_secret_key = $this->validateParameter('client_secret_key', $this->param['client_secret_key'], STRING);
        //client_secret_key should be commented out it is not used for validation for security purposes, only id key

        $stmt = $this->dbConn->prepare("SELECT * FROM `api_clients_properties` WHERE client_id = :client_id_key");
        $stmt->bindParam(":client_id_key", $client_id_key);
        $stmt->execute();
        $user = $stmt->fetch(PDO::FETCH_ASSOC);
        if (!is_array($user)){
            $this->returnResponse(API_NAME_REQUIRED, "Invalid Client Id Key");
        }

        if ($user['property_status'] == "not verified"){
           $this->returnResponse(API_NAME_REQUIRED, "Property not verified, please contact admin, to verify it");   
        }

        $payload = [
           'iat' => time(),
           'iss' => 'localhost',
           'exp' => time() + (60),
           'userId' => $user['id']
        ];
        $token = JWT::encode($payload, SECRETE_KEY);
        echo $token;
    }

  }

?>

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Если вы скопировали файл из GitHub, а не использовали composer для его установки, вам необходимо закомментировать строки пространства имен в верхней части файла.поэтому из моего снимка в самом верху первой строки jwt.php снимка экрана вы закомментируете //namespace Firebase\JWT;, и вы больше не получите ошибку 500 внутреннего сервера.

0 голосов
/ 19 мая 2018

Класс JWT находится в пространстве имен Firebase\JWT, поэтому вам потребуется либо use it:

use \Firebase\Jwt\Jwt;
Jwt::encode(...);

, либо использовать его полное пространство имен при вызове:

\Firebase\Jwt\Jwt::encode();
...