Firebase PHP-JWT с Zend 2.0 не может загрузить модуль

Я установил php-jwt из https://github.com/firebase/php-jwt с композитором.

Теперь у меня есть библиотека, расположенная в vendor \ firebase \ php-jwt \ Firebase \ PHP-JWT, и содержимое этого каталога такое же, как в git.

в application.config.php у меня есть:

'modules' => array(
// 'ZendDeveloperTools',
'DoctrineModule',
'DoctrineORMModule',
'JWT'
),

в autoload_namespaces.php у меня есть:

'JWT\\' => array($vendorDir . '/firebase/php-jwt/Firebase'),

autoload_classmap.php:

'JWT' => $vendorDir . '/firebase/php-jwt/Firebase/PHP-JWT/Authentication/JWT.php',

Ошибка:

Fatal error: Uncaught exception 'Zend\ModuleManager\Exception\RuntimeException' with message 'Module (JWT) could not be initialized.' in \vendor\zendframework\zendframework\library\Zend\ModuleManager\ModuleManager.php on line 175

Я не знаю, что я делаю неправильно.

0

Решение

Библиотека php-jwt не является модулем ZF2, поэтому вы не можете загрузить ее как модуль zf2. Просто используйте библиотеку JWT в своем модуле (например, модуль приложения из приложения ZF2-скелет)

1

Другие решения

Мы можем использовать JWT напрямую из AuthController.

На вершине:

use Firebase\JWT\JWT;

Затем создайте функцию для генерации токена JWT, например:

public function generateAuthToken($userData, $data) {
if(password_verify($data['password'], $userData['hashPassword'])) {
$tokenId    = base64_encode(mcrypt_create_iv(32));
$issuedAt   = time();

$data = [
'iat'  => $issuedAt,         // Issued at: time when the token was generated
'jti'  => $tokenId,          // Json Token Id: an unique identifier for the token
'data'  => $userData
];

$jwt = JWT::encode($data, 'testKey', self::JWT_ALGO); //use self::JWT_ALGO => HS512
$unencodedArray = ['jwt' => $jwt];
return json_encode($unencodedArray);
}
}

И используйте следующую функцию для проверки и декодирования токена:

public function checkAuthToken($data) {
$request = $this->getRequest();
$authHeader = $request->getHeader('Authorization');

if($authHeader) {
list($token) = sscanf( $authHeader->toString(), 'Authorization: Bearer %s');
if($token) {
try{
$secretKey = 'testKey';
$decryptedToken = JWT::decode($token, $secretKey, [self::JWT_ALGO]); // //use self::JWT_ALGO => HS512
return $decryptedToken->data;
} catch (\Exception $ex) {
return false;
}
}
}
return false;
}
2

По вопросам рекламы [email protected]