簡単な Web サイトを構築し、ここにある ACL ガイドを使用して認証を追加しました。私はそれを文字どおりに実行したと思います。
私が抱えている問題は次のとおりです。
ログインした後、有効な URL にアクセスしようとすると、ルート フォルダーが再度追加されます。例:
projectpath/controllerpath/action
にリダイレクトします
projectpath/projectpath/controllerpath/action
私が気づいた3つのこと:
- ユーザーがログインしている場合にのみ発生します。ログインしていない場合は、ログイン ページに正しくリダイレクトされます。
- コントローラーであるページでのみ、これが発生します。間違ったページを挿入すると、Missing Controller Exception がスローされます。
- 公開アクセスを許可するページはすべて問題なく動作します。それは、公開されていないものだけです。
編集:
今朝、CakePHP 2.5.3 の新しいバージョンをインストールしました。次に、routes ファイルを除くすべてのファイルを手動でコピーしました。それでも同じエラーが発生します。
これを引き起こしている可能性のあるアイデアはありますか?
編集: これでもう少し進みました。ACL コンポーネントを削除し、認証コンポーネントを使用しました。
この問題は、ログインしているユーザーが許可されていない URL にアクセスしようとした場合にのみ発生するようです。ケーキから
プロパティ
AuthComponent::$unauthorizedRedirect
不正アクセスの処理を制御します。デフォルトでは、許可されていないユーザーはリファラー URL または AuthComponent::$loginAction または '/' にリダイレクトされます。false に設定すると、リダイレクトの代わりに ForbiddenException 例外がスローされます。
私のアプリコントローラーで
public $components = array(
'DebugKit.Toolbar',
'Auth' => array(
'redirectUrl' => array(
'controller' => 'pages',
'action' => 'index'
),
'logoutRedirect' => array(
'controller' => 'user',
'action' => 'login',
'home'
),
'authenticate' => array(
'Form' => array(
'passwordHasher' => 'Blowfish'
)
),
'unauthorizedRedirect'=> false,// I have added this line
'Session',
'authorize' => array('Controller')
)
);
これは機能しています (まったくリダイレクトしないという点で)。ドキュメントに従って、不正なリダイレクトを正しいルートに取得する方法を誰かが説明できますか?
編集 これはApp Controllerの私のbeforeFilterです
public function beforeFilter() {
$this->Auth->allow('display');
/*if($this->Auth->user('role') == 'apa'){
$this->Auth->redirectUrl = "/apa";
}else{
$this->Auth->redirectUrl = "/test";
}*/ //Moved logic to UserController
parent::beforeFilter();
}
ユーザーコントローラーの編集
public function login() {
if ($this->request->is('post')) {
if ($this->Auth->login()) {
if($this->Auth->user('role') == 'apa'){
$this->Auth->redirectUrl = "/apa";
}else{
$this->Auth->redirectUrl = "/test";
}
return $this->redirect($this->Auth->redirectUrl);
}
$this->Session->setFlash(__('Invalid username or password, try again'));
}
}