peristiwa respons api zf2 ditangkap oleh bjyauthorize

Hai, bisakah seseorang membantu saya mencegah bjyauthorize menangkap kesalahan acara api saya?

bjyauthorize mengalihkan pengguna yang tidak login ke formulir login seperti yang ditambahkan ke konfigurasi. Tetapi karena api saya diizinkan untuk semua peran bahkan untuk tamu, saya hanya ingin api tersebut mengembalikan pesan kesalahan Json yang ditangkap oleh ApiProblemListener

ApplicationRest\Module.php

class Module implements
    ConfigProviderInterface, 
    AutoloaderProviderInterface
{

    public function onBootstrap(MvcEvent $e)
    {
        $app = $e->getApplication();
        $sm = $app->getServiceManager();
        $events = $app->getEventManager();

        $listener = $sm->get('ApplicationRest\ApiAuthenticationListener');
        $events->getSharedManager()->attach('ApplicationRest\Controller', 'dispatch', $listener, 500);

        $events->attach('render', array($this, 'onRender'), 100);
        $events->attach($sm->get('ApplicationRest\ApiProblemListener'));
    }

    /**
     * Listener for the render event
     * Attaches a rendering/response strategy to the View.
     *
     * @param  \Zend\Mvc\MvcEvent $e
     */
    public function onRender($e)
    {
        $result = $e->getResult();
        if (!$result instanceof RestfulJsonModel) {
            return;
        }
        //var_dump(123);exit();


        $app = $e->getTarget();
        $services = $app->getServiceManager();
        $view = $services->get('View');
        $restfulJsonStrategy = $services->get('ApplicationRest\RestfulJsonStrategy');
        $events = $view->getEventManager();

        // register at high priority, to "beat" normal json strategy registered
        // via view manager
        $events->attach($restfulJsonStrategy, 500);
    }
}

Memiliki banyak modul dan saya benar-benar berpikir untuk memindahkan apiModule "ApplicationRest" saya ke proyek lain tetapi tidak benar-benar ingin memperbarui model dan layanan setiap kali saya membuat beberapa pembaruan pada proyek utama.

Setiap saran akan diterima! Terima kasih atas waktunya!

EDIT: Menyediakan lebih banyak kelas HeaderAuthentication

class HeaderAuthentication implements AdapterInterface
{

    const AUTHORIZATION_HEADER = 'Authorization';
    const CRYPTO = 'sha256';

    protected $request;
    protected $repository;

    public function __construct(RequestInterface $request, UserRepository $repository)
    {
        $this->request = $request;
        $this->repository = $repository;
    }

    /**
     * Authorization: Key={key} Timestamp={timestamp} Signature={signature}
     * @return Result
     */
    public function authenticate()
    {
        $request = $this->getRequest();
        if (!$request instanceof Request) {
            return;
        }
        $headers = $request->getHeaders();

        // Check Authorization header presence
        if (!$headers->has(static::AUTHORIZATION_HEADER)) {
            return new Result(Result::FAILURE, null, array(
                'Authorization header missing'
            ));
        }

        $authorization = $headers->get(static::AUTHORIZATION_HEADER)->getFieldValue();

        // Validate public key
        $publicKey = $this->extractPublicKey($authorization);
        $user = $this->getUserRepository()
                     ->findOneByApiSecret($publicKey);

        if (null === $user) {
            $code = Result::FAILURE_IDENTITY_NOT_FOUND;
            return new Result($code, null, array(
                'User not found based on public key'
            ));
        }

        // Validate signature
        $signature = $this->extractSignature($authorization);
        /*$hmac = $this->getHmac($request, $user);
        if ($signature !== $hmac) {
            $code = Result::FAILURE_CREDENTIAL_INVALID;
            return new Result($code, null, array(
                'Signature does not match'
            ));
        }*/

        return new Result(Result::SUCCESS, $user);
    }
}

ApiAuthenticationListener

class ApiAuthenticationListener
{

    protected $adapter;

    public function __construct(HeaderAuthentication $adapter)
    {
        $this->adapter = $adapter;
    }

    public function __invoke(MvcEvent $event)
    {
        $result = $this->adapter->authenticate();

        if (!$result->isValid()) {
            $response = $event->getResponse();

            // Set some response content
            $response->setStatusCode(401);
            return $response;
        }

        // All is OK
        $event->setParam('user', $result->getIdentity());
    }

}

person Marcel Djaman    schedule 10.06.2015    source sumber
comment
Saya tidak yakin apa yang Anda tanyakan. Bisakah Anda memberikan sedikit lebih banyak detail tentang masalahnya?   -  person Ankh    schedule 10.06.2015
comment
Apakah APAPUN permintaan ke api dicegah oleh bjy?   -  person Valentin Rusk    schedule 10.06.2015
comment
@ValentinRusk tidak karena saya mengizinkan semua pengontrol api dengan bjyauthorize   -  person Marcel Djaman    schedule 10.06.2015
comment
Masalah @Svengali terjadi ketika ada kesalahan dalam memvalidasi otorisasi api   -  person Marcel Djaman    schedule 10.06.2015
comment
@Svengali mungkin menambahkan rute kesalahan untuk mengizinkan akses tamu?   -  person Valentin Rusk    schedule 10.06.2015
comment
menambahkan beberapa pengeditan pada pertanyaan dengan lebih banyak kelas   -  person Marcel Djaman    schedule 10.06.2015


Jawaban (1)


Saya kira Anda telah mengonfigurasi penjaga di rute Anda. Anda perlu memberi tahu BJYAuthorize, melalui konfigurasi modul Anda, bahwa pengontrol atau rute ini tidak boleh dilindungi.

'bjyauthorize' => [

    'default_role'          => 'guest',

    ...     

    'guards' => [
        'BjyAuthorize\Guard\Controller' => [

            // system tools
            ['controller' => 'Application\Controller\Api', 'roles' => [] ],

            ['controller' => 'error', 'roles' => []],

        ],
    ],
],

Saya menghilangkan seluk beluk aplikasi tertentu, tetapi hal semacam ini diselesaikan dengan cepat. Saya memiliki kebutuhan serupa agar rute CLI tidak dilindungi oleh hal lain, http auth.

person Saeven    schedule 10.06.2015