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;
    }