【问题标题】:Firebase PHP-JWT with Zend 2.0 cannot load module带有 Zend 2.0 的 Firebase PHP-JWT 无法加载模块
【发布时间】:2015-06-24 04:14:06
【问题描述】:

我用 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 zend-framework2 jwt


    【解决方案1】:

    我们可以直接从 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;
        }
    

    【讨论】:

      【解决方案2】:

      php-jwt lib 不是 ZF2 模块,因此您不能将其作为 zf2 模块加载。只需在您的模块中使用 JWT 库(例如 ZF2 框架应用程序中的应用程序模块)

      【讨论】:

      • 是的,这对我有用,我已经做到了,谢谢你的回答。我是 zend 新手并且很棘手,因为 composer 将它与其他模块一起安装。
      猜你喜欢
      • 2014-08-28
      • 1970-01-01
      • 2020-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-16
      • 1970-01-01
      • 2011-03-08
      相关资源
      最近更新 更多