0

BaseAuthenticateクラスを拡張する認証コンポーネントがいくつかあります。これらは、通常の方法でAppControllerに設定されます。

認証コンポーネントがAuthComponentのloginRedirect変数を変更することは可能ですか?

状況を明確にするために、私の認証コンポーネントの1つは、ユーザーの特定のサブセットを調べます。その人に未払いの請求書があるかどうかを確認する前に、資格情報が有効かどうかを確認します。未解決の価値に応じて、ユーザーを特定のページにリダイレクトするか、完全にブロックしたいと思います。

ありがとう

4

2 に答える 2

1

はい、可能です。AuthComponent のリダイレクト先は単なるセッション変数です (技術的にはどこにでも設定できます)。

リダイレクトの場所を変更するには、手動で設定できます。

$this->Session->write('Auth.redirect', 'http://example.com');

次のリクエストで、それらは AuthComponent によってリダイレクトされます。

または、コンポーネントにその場でリダイレクトさせる:

$this->_Collection->getController()->redirect('http://example.com');
于 2012-10-17T14:22:41.470 に答える
0

私を正しい方向に押してくれた@jerermyharrisに大いに感謝します。これが私がやったことと一致します。

1. AuthComponent の拡張

    App::uses('AuthComponent', 'Controller/Component');

    class MyAuthComponent extends AuthComponent {

      var $components = array('Session'); 

      public function identify(CakeRequest $request, CakeResponse $response) {
        if (empty($this->_authenticateObjects)) {
            $this->constructAuthenticate();
        }
        foreach ($this->_authenticateObjects as $auth) {
            $result = $auth->authenticate($request, $response);
            if (!empty($result) && is_array($result)) {
                if(isset($result['Redirect']))
                {
                    $this->Session->write('Auth.redirect', $result['Redirect']);            
                }
                return $result;
            }
        }
        return false;
      }
    }

2.これをAppControllerコンポーネントに追加します

public $components = array(
        'Auth' => array(
            'className' => 'MyAuth',
        )
);

AuthComponent の他の定義にこのビットを追加します。

3. 認証コンポーネントからリダイレクトを返す

App::uses('BaseAuthenticate', 'Controller/Component/Auth');

class TutorAuthenticate extends BaseAuthenticate {

    public function authenticate(CakeRequest $request, CakeResponse $response) {
        $user = ...... // However you authenticate your user
        $user['Redirect'] = "http://example.com";
        return $user;
    }
}

したがって、ユーザーに基づいてリダイレクトする場合は、追加するだけで済みます。そうしない場合、cake は AppController で設定したディレクティブに従います。

うわー、それは私が余分にやらなければならなかったようですが、それは正しいことです.

于 2012-10-18T15:50:54.813 に答える