0

通常とはまったく異なる方法で認証を処理する特別なルートプレフィックスが必要になるという異常な状況があります。基本的に、このルートプレフィックスに対するすべてのリクエストには、(アプリコントローラー上の) "isAuthorized"で権限が付与され、レイアウトはこの接続用の特別なレイアウトに設定されます。これまでのところ、以下は問題なく機能します。

if(isset($this->params['special']) && $this->params['special'])
{
    $this->layout = 'special';
    return true;        
}

これに加えて発生する必要があるのは、要求が行われるたびに、キー/トークンの組み合わせがデータベースに対して有効なエントリについてチェックされることです。エントリが無効な場合は、特別なレイアウトを使用して「無効なキー/トークンの組み合わせ」のみを出力する必要があります。エントリが有効な場合は、通常どおり続行されます。

そのルートプレフィックス上のすべての接続がチェックされるように、このチェックを行う適切な場所はどこでしょうか。また、失敗時にそのテキストのみを送信するにはどうすればよいですか。認証が失敗した場合に別のコントローラーとビューが使用されるようにルートを変更する方法はありますか?

4

1 に答える 1

0

ああ今、私は理解していると思います。

すべてのアクションの前にチェックを実行して、渡されたパラメーターがトークン/キーを有効にしているかどうかを確認します。

これは、コントローラー内のbeforefilter関数で実行されます。

public function beforeFilter()
{
    if(!isset($this->params['special']))
    {
        $this->render('fail_view');
        exit;
    }    
}

ここで、渡されたパラメーターのチェックを実行できます。パラメーターが検証に失敗した場合は、必要なテキストを使用してカスタムビューをレンダリングし、スクリプトの残りの部分を終了できます。

于 2012-07-22T08:59:57.160 に答える