0

Zend フレームワーク 2.2 を使用してモジュールの 1 つに対して http 認証を作成しようとしています。私のコードは、公式ドキュメントから強くインスピレーションを得ています。

    $request=$this->getRequest();
    $response=$this->getResponse();

    assert($request instanceof Zend\Http\Request);
    assert($response instanceof Zend\Http\Response);

問題は、アサーションが false になることです。$request と $response が別のクラスから来ているように見えるため、スクリプトが機能していません。Controller で Zend\Http\Request|Response からリクエストとレスポンスを取得するにはどうすればよいですか?

どうもありがとう。

4

1 に答える 1

1

モジュール全体に HTTP 認証を設定する場合は、次のようにします (少なくとも私が行った方法):

Module.php で:

    public function onBootstrap(MvcEvent $e){
        $sharedEvents=$e->getApplication()->getEventManager()->getSharedManager();
        $sharedEvents->attach(__NAMESPACE__,MvcEvent::EVENT_DISPATCH, array($this, 'authHttp'));
    }


    public function authHttp(MvcEvent $e){

        $serviceManager = $e->getApplication()->getServiceManager();

        $request=$e->getRequest();
        $response=$e->getResponse();

        if(!(
          $request instanceof \Zend\Http\Request
          && $response instanceof \Zend\Http\Response
          )){
          return; // we're not in HTTP context - CLI application?
          } 

        // Your adapter with config/password etc...
        $authAdapter=$serviceManager->get('Admin\AuthenticationAdapter');

        $authAdapter->setRequest($request);
        $authAdapter->setResponse($response);

        $result=$authAdapter->authenticate();

        if($result->isValid()){
            return true; // everything OK
        }

        $response->setContent('Access denied');
        $response->setStatusCode(\Zend\Http\Response::STATUS_CODE_401);

        $e->setResult($response); // short-circuit to application end

        return false;
    }

それで全部です :)。これは、モジュールのどのページでも機能します!

于 2013-07-17T15:48:08.843 に答える