2

私は Phalcon を学習しています (マルチモジュールアプリケーション テンプレートで REST API を試しています)。たとえば、「このリクエストには特定のヘッダーが含まれていますか」 x-api-key(ASP.NET MVC の ActionFilters のようなもの) など、各リクエストに対して簡単なチェックを行いました。

  1. annotationspluginsbeforeExecuteRoute、 でやってみましたbeforeException。しかし、それらのいずれかに書き込むとthrow new \Exception("Some exception", 500);、Phalcon は例外メッセージとコードなしで空白のページを返します。私の知る限り、これは既知のバグです。

  2. dispatcher私はin でそれをやろうとしましたbeforeException:

     public function beforeException($event, $dispatcher, $exception)
     {
        if ($exception instanceof \Phalcon\Http\Request\Exception)
        {
            $dispatcher->forward(
                    array(
                        'controller' => 'error',
                        'action' => 'showInternalServerError'
                    )
            );
            return false;
        }
        //...
      }

それは機能しているようですが、これはエレガントなソリューションではなく、私はこれが面倒です:)

質問: PhalconPHP で ActionFilters を実行する方法について何か良いアイデアはありますか?

4

2 に答える 2

0

API キーを確認するには、Match Callbacks を使用できます。

次のルートがあるとします。

$router->add('/api/v1', array(
    'module'     => 'api',
    'controller' => 'index'
))

次のようにチェックを追加できます。

$router->add('/api/v1', array(
    'module'     => 'api',
    'controller' => 'index'
))
->beforeMatch(array(new AuthenticationFilter(), 'check'));

また、カスタム作成された AuthenticationFilter で、有効な API キーを確認できます。

<?php

class AuthenticationFilter
{

    public function check($uri, $route)
    {
        $response = new \Phalcon\Http\Response();

        if ($response->getHeaders()->get('X-Api-Key') != 'XYZ')
        {

            throw new CustomAuthenticationErrorExteption('Api Key Invalid');

            // you can also just return false here and redirect to a default non-authenticated 404 response

        }

        else return true;

    }

}

参照

https://docs.phalconphp.com/en/latest/reference/routing.html#match-callbacks

于 2015-10-20T09:56:09.470 に答える