2011-12-22 4 views
1

私は何を求めているのかというと多くの関連記事がありますが、長時間の検索では私が探していたものを見つけることができませんでした。どこかに存在する。リクエストをリダイレクトするとZendアプリケーションのキャッチオールコントローラが永久にループすることなく

私の目標 - Zend Appへのすべてのリクエストは、preDispatchプラグインを経由して、既存の認証情報が要求された操作に十分かどうかを判断するカスタムAuthコントローラに渡す必要があります。 'Sufficient'はアプリのロジックに依存するので、なぜコントローラ+モデルレベルでこれをやりたいのですか?それらが十分であれば、彼らは指定されたコントローラ+アクションに沿って元の要求を送信します。

現在私はpreDispatchで設定された認証カスタムプラグインを使用して、POSTされた認証資格情報(ログインしている場合)を確認し、すべての場合、プラグインは元の要求を保存し、 「ラ、私の認証コントローラへの)Dかどうか:

$request->setModuleName('default') 
      ->setControllerName('auth') 
      ->setActionName('check') 
      ->setParam('oreq',$request->getParams()); 

私の問題/質問は、私のauth-以内ということです>決定がなされた後、私はリダイレクトを実行すべきか、アクションを確認しますか?私が使用している場合:

$this->_helper->redirector($or['action'], $oreq['controller']); 

これらの要求がpreDispatchプラグインを再び通過すると、私は明らかに無限ループに陥ります。もちろん、Authプラグインがそのような要求を無視するようにリダイレクトで何かを渡すこともできますが、これは明らかにセキュリティホールです。 md5ハッシュを生成して格納することを考えてセッションに格納し、それをエスケープパラメータとして渡すことを考えましたが、それは少しスケッチしたようです。

もっと良いアイデアはありますか?おそらく、Zend Appの標準的なプレディスパッチルーチンを経​​由しないリダイレクト方法でしょうか?前もって感謝します!

答えて

0

これは、通常、Zend Frameworkでどのように行われるかではありません。すべてのリクエストが共通の場所に移動するわけではなく、元の要求された場所の認証にリダイレクトされます。

アクセス制御のためにZend_Aclを使用してください。これにより、現在のユーザーがコンテンツにアクセスするために必要な権限を持っているかどうかを簡単に判断できます。

あなたのテクニックを使用することに忠実な場合は、リダイレクトメソッドの代わりに_forwardメソッドを使用してください。

_forwardは内部リダイレクトであるため、追加の引数を渡してpreDispathでループを回避することができます。

$this->_forward($action, $controller, $module, $params) 
+1

あなたはスターです。多くの感謝です。 – Dan

+1

fyi、_forwardはディスパッチを介して流れます。 – Dan

関連する問題