[英]Error: Lcobucci\JWT\UnencryptedToken cannot implement Lcobucci\JWT\Token - it is not an interface
[英]Error when creating token with JWT
我正在构建API,但是使用JWT创建令牌时遇到未捕获错误,当我运行邮递员调用时,出现错误日志堆栈跟踪:
#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}
但是,当我在PHP服务器上检查jwt文件时,它就有类JWT。
带有jwt类屏幕截图的**jwt.php**
页面
然后我用来创建令牌的页面是**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;
}
}
?>
JWT
类位于命名空间Firebase\\JWT
,因此您将需要use
它:
use \Firebase\Jwt\Jwt;
Jwt::encode(...);
或在调用时使用其完整名称空间:
\Firebase\Jwt\Jwt::encode();
如果从GitHub复制文件而不是使用composer进行安装,则需要在文件顶部注释掉名称空间行。 因此,从jwt.php
屏幕截图第一行顶部的快照中,您将//namespace Firebase\\JWT;
注释掉//namespace Firebase\\JWT;
并且您不会再收到500内部服务器错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.