3

私は CakePHP 2.0 を使用しており、cakeDC ユーザー プラグインをインストールしています。プラグインの UsersController _setupAuth 関数で定義されているように、ログインして「/」にリダイレクトできる限り、Users プラグインは機能しているようです。

しかし、これを変更したいので、別のstackoverflowの質問から認証セットアップコードをAppController beforeFilter関数に追加しました。

問題は、これが無視されているようで、UsersController の _setupAuth コードが優先されることです。

私の質問は、プラグインのコードを変更せずに、AppController にカスタム リダイレクト コントロールを追加するにはどうすればよいですか?

私がリンクした質問が AppController に isAuthorized 関数を配置するように指示しているという事実にさらに混乱しています。これは、UsersAppController の関数を削除する必要があることを意味しているようです。

4

2 に答える 2

2

アイデアは、あなたのクラスをオーバーライドすることで拡張するということですapp

でアプリ固有のAuth設定を構成することは正しいですAppControllerAuthまた、プロジェクトにコンポーネントを含めることもできます。

次に、次のAppController::beforeFilter()ような特定の設定を構成できます

$this->Auth->loginRedirect = '/';

したがって、リンクした他の質問は正しいですが、すべての設定は必要なく、上書きしたい設定だけが必要です。

isAuthorized()Controller 認証を使用している場合は、誰が何を表示できるかを制御する必要があるため、AppController に を追加することを強くお勧めします。悪いロールやログインをチェックしていないため、他の質問が言うようにtrueを返さないでください

ログイン アクションを変更する場合は、「app/Controller」に独自のコントローラーを作成し、それを 以外の名前にする必要があります。Users私はこのコントローラーを使用する傾向がありMyUsersController.php、プラグインを拡張する必要があります。コントローラ。App::uses('Users.UsersController','Controller')または同様のファイルを含める必要があります。その後、コントローラーを使用できます

class MyUsersController extends UsersController{
  public function login(){

  }
}

Users プラグインではこれを行う必要はありませんでしたので、おそらくAppController::beforeFilter()最初に設定してみて、一番上で呼び出していることを確認してくださいparent::beforeFilter()

于 2012-12-10T17:29:49.467 に答える
1

routes.php のリダイレクトを変更しましたか? これが私のものです。プラグインルートを無効にして、自分のコントローラーAppUsersController.phpを参照しました

/admin/ プレフィックスを使用していることに注意してください。必要ない場合は、ルート パスの先頭にある「/admin/」と、「prefix」および「admin」キー テーブルを削除します。

Router::connect('/admin/users', array('plugin' => null, 'controller' => 'app_users', 'prefix' => 'admin', 'admin' => true));
Router::connect('/admin/users/index/*', array('plugin' => null, 'controller' => 'app_users', 'prefix' => 'admin', 'admin' => true));
Router::connect('/admin/users/users/:action/*', array('plugin' => null, 'controller' => 'app_users', 'prefix' => 'admin', 'admin' => true));
Router::connect('/admin/users', array('plugin' => null, 'controller' => 'app_users', 'prefix' => 'admin', 'admin' => true));
Router::connect('/users/:action/*', array('admin' => false, 'plugin' => null, 'controller' => 'app_users'));
Router::connect('/login/*', array('plugin' => null, 'controller' => 'app_users', 'action' => 'login'));
Router::connect('/logout/*', array('plugin' => null, 'controller' => 'app_users', 'action' => 'logout'));
Router::connect('/register/*', array('plugin' => null, 'controller' => 'app_users', 'action' => 'add'));
于 2013-04-21T20:00:27.630 に答える