Firebase PHP-JWT with Zend 2.0 无法加载模块
Firebase PHP-JWT with Zend 2.0 cannot load module
我使用 composer 从 https://github.com/firebase/php-jwt 安装了 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 框架应用程序的应用程序模块)
我们可以直接从 AuthController 使用 JWT Like:
在顶部:
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;
}
我使用 composer 从 https://github.com/firebase/php-jwt 安装了 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 框架应用程序的应用程序模块)
我们可以直接从 AuthController 使用 JWT Like:
在顶部:
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;
}