Я установил 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
Я не знаю, что я делаю неправильно.
Библиотека php-jwt не является модулем ZF2, поэтому вы не можете загрузить ее как модуль zf2. Просто используйте библиотеку JWT в своем модуле (например, модуль приложения из приложения ZF2-скелет)
Мы можем использовать 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;
}