RESTのbeforeでのレスポンス処理について

1,236 views
Skip to first unread message

宮崎葵

unread,
Dec 5, 2013, 2:38:55 AM12/5/13
to fuelp...@googlegroups.com
はじめまして、宮崎と申します。

FuelPHP 1.7.1をCentOS6、PHP 5.3.3の環境で動作させております。

現在、小規模なREST APIを作成していますが、
どうしても、解決できないことがあり、皆様のお力を
お借りしたく、投稿させて頂きました。

beforeメソッドにて、認証処理を行い、認証が失敗したら、
ステータスコード401とエラメッセージを返却し、その後の処理を終了したいと考えております。

しかし、現在の私のコードでは、beforeメソッド実行後、その後、HTTP メソッドに
応じた処理が実行されてしまうため、認証失敗時に、想定した動作になりません。

beforeメソッドに限った話ではないかもしれませんが、Controler_RESTを利用した際に、
途中で処理を中断し、レスポンスを返すことは可能でしょうか?

上記の方法ができないのであれば、認証失敗時に、独自のExceptionを
発生させて対応したいと考えております。

他の方法がございましたら、ご教授頂けると幸いです。

--------------------------------------------------------------------------------------------------------------------------------------------
class Controller_User extends Controller_REST {

  public function before() {

    parent::before();

    if (!$this->is_user_auth ()) {
       $this->response (array ('message' => '認証できませんでした。' ), 404);  
    }

  }

  public function get_list() {
       ......
  }
}
--------------------------------------------------------------------------------------------------------------------------------------------


池崎 真太郎

unread,
Dec 5, 2013, 2:58:34 AM12/5/13
to fuelp...@googlegroups.com
宮崎さん

はじめまして。
池崎@hackohと申します。

私の場合は、宮崎さんが仰ってるように、
独自のExceptionを投げてます。

catchは public/index.php に加筆しています。


--- 抜粋 ---
catch (HttpNotFoundException $e)
{
$route = array_key_exists('_404_', Router::$routes) ? Router::$routes['_404_']->translation : Config::get('routes._404_');
(略)
}
catch (UnauthorizedException $e)
{
// $eには、認証失敗時のURIの情報が格納されており
    // 認証処理後の自動復帰に使えるようにしている
Session::set('exception.unauthorized', $e);
$response = $e->response();
}
---


ご参考になれば幸いです。
--
{
"name":"池崎真太郎",
"corporate name":"株式会社インプレッシブ",
"postcode":"151-0051",
"address":"東京都渋谷区千駄ヶ谷2-34-13 ベルファイブビル2F",
"tel":"03-6804-2891",
"fax":"03-6804-2892",
"e-mail":"ike...@impv.co.jp",
"url":"http://www.impv.co.jp"
}

Kenji Suzuki

unread,
Dec 5, 2013, 2:59:28 AM12/5/13
to fuelp...@googlegroups.com
Kenji です。


On Wed, 4 Dec 2013 23:38:55 -0800 (PST)
宮崎葵 <fga....@gmail.com> wrote:

> はじめまして、宮崎と申します。
>
> FuelPHP 1.7.1をCentOS6、PHP 5.3.3の環境で動作させております。
>
> 現在、小規模なREST APIを作成していますが、
> どうしても、解決できないことがあり、皆様のお力を
> お借りしたく、投稿させて頂きました。
>
> beforeメソッドにて、認証処理を行い、認証が失敗したら、
> ステータスコード401とエラメッセージを返却し、その後の処理を終了したいと考えております。

ここが、フレームワークの流儀から外れています。

http://fuelphp.jp/docs/1.7/general/controllers/rest.html

の設定の auth で認証メソッドを定義してください。


// Kenji


> しかし、現在の私のコードでは、beforeメソッド実行後、その後、HTTP メソッドに
> 応じた処理が実行されてしまうため、認証失敗時に、想定した動作になりません。
>
> beforeメソッドに限った話ではないかもしれませんが、Controler_RESTを利用した際に、
> 途中で処理を中断し、レスポンスを返すことは可能でしょうか?
>
> 上記の方法ができないのであれば、認証失敗時に、独自のExceptionを
> 発生させて対応したいと考えております。
>
> 他の方法がございましたら、ご教授頂けると幸いです。
>
> --------------------------------------------------------------------------------------------------------------------------------------------
> class Controller_User extends Controller_REST {
>
> public function before() {
>
> parent::before();
>
> if (!$this->is_user_auth ()) {
> $this->response (array ('message' => '認証できませんでした。' ), 404);
> }
>
> }
>
> public function get_list() {
> ......
> }
> }
> --------------------------------------------------------------------------------------------------------------------------------------------
>
>
> --
> このメールは Google グループのグループ「fuelphp.jp」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、fuelphp_jp+...@googlegroups.com にメールを送信します。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
Reply all
Reply to author
Forward
0 new messages