0

アプリケーションでACLを使用しています。AppControllerのbeforeFilterでloginActionを定義しましたが、それでも正しい場所にリダイレクトされません。私がやりたいのは、ユーザーがこのようにアプリにアクセスするときです-localhost / intraweb次に、localhost / intraweb / users/loginにリダイレクトする必要があります

これが私のAppControllerコードです

class AppController extends Controller {

public $helpers = array('Html', 'Form', 'CustomFields.Field');

public $components = array(
'CustomFields.Field',
'Acl',
'Auth' => array(
'authorize' => array(
'Actions' => array('actionPath' => 'controllers')
)
),
'Session',
'Cookie',
);

public $uses = array('User');

public function beforeFilter() {       

//Configure AuthComponent
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');
$this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'login');
$this->Auth->allow('display');

//OTHER CODE

}

これが私のPagesControllerコードです

class PagesController extends AppController {

public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow();
}

//Other code

ユーザー/ログインページにリダイレクトされない理由を誰かが知っていますか?

前もって感謝します

4

1 に答える 1

0

loginRedirectは、認証セッションが見つからない場合に呼び出すアクションを意味します。簡単に言えば、ログインページです。認証を必要とせずに通過できるアクションは、loginRedirectにリダイレクトされることはありません。

にアクセスするlocalhost/intrawebと、Cakeがレンダリングされ、コードに含まれてPages/displayいるためです$this->Auth->allow('display');。Authは、loginRedirectにリダイレクトせずにレンダリングさせます。

アップデート:

他のコントローラーでbeforeFilter()を再宣言すると、AppControllerのすべての宣言が上書きされます。したがって、AppControllerのbeforeFilter()からの宣言を継承する場合は、

public function beforeFilter() {
    parent::beforeFilter(); // inherit beforeFilter() from AppController
    // your controller specific declarations
}
于 2013-03-12T16:17:58.670 に答える