4

簡単な Web サイトを構築し、ここにある ACL ガイドを使用して認証を追加しました。私はそれを文字どおりに実行したと思います。

私が抱えている問題は次のとおりです。
ログインした後、有効な URL にアクセスしようとすると、ルート フォルダーが再度追加されます。例:

 projectpath/controllerpath/action

にリダイレクトします

 projectpath/projectpath/controllerpath/action

私が気づいた3つのこと:

  1. ユーザーがログインしている場合にのみ発生します。ログインしていない場合は、ログイン ページに正しくリダイレ​​クトされます。
  2. コントローラーであるページでのみ、これが発生します。間違ったページを挿入すると、Missing Controller Exception がスローされます。
  3. 公開アクセスを許可するページはすべて問題なく動作します。それは、公開されていないものだけです。

編集:

今朝、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'));
    }
}
4

1 に答える 1

0

次のように、AuthComponent の初期化に loginAction および loginRedirect プロパティを追加してみてください。

'Auth' => array(
    'loginAction' => array('admin' => false, 'controller' => 'users', 'action' => 'login'),
    'loginRedirect' => array('admin' => false, 'controller' => 'pages', 'action' => 'index'),    // redirected here after login success
    'logoutRedirect' => array(
        'controller' => 'user',
        'action' => 'login',
        'home'
    ),
    'authenticate' => array(
        'Form' => array(
            'passwordHasher' => 'Blowfish'
        )
    ), ...

さらに、AuthComponent::redirectUrl はプロパティではなくメソッドであり、v2.3 以降では非推奨です。

ここを参照してください: http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html

于 2015-02-10T09:13:26.760 に答える