CakePHP - Как разрешить неаутентифицированный доступ к определенным страницам

Я создал приложение CakePHP, где я создал UsersController, который обрабатывает все о пользователях. Когда я пытаюсь просмотреть www.mydomain.com, если я вошел в систему, это позволит мне увидеть индекс (app/View/Pages/home.ctp). Иначе, это перенаправляет меня на mydomain.com/users/login и продолжает входить в систему.

Я пытался смотреть на AppController.php, PagesController.php или же app/Config/core.php а также app/Config/routes.php, но ничего не нашел. мой UsersController.phpКроме того, не несет ответственности за это, я думаю.

Я не помню, и я не могу найти, как это отключить. Какой файл должен отвечать за это?

РЕДАКТИРОВАТЬ: моя версия CakePHP 2.3.

1 ответ

Решение

Как правило, вы можете сделать определенные действия общедоступными, используя компоненты аутентификации allow() метод.

Чтобы сделать страницы общедоступными, может потребоваться немного больше усилий, если вы хотите сделать общедоступными только определенные страницы, поскольку PagesController обрабатывает все страницы одним действием (display()). Если это так, то вы могли бы использовать request->params['pass'][0] который будет содержать имя страницы, проверить его по списку разрешенных страниц, а затем разрешить display действие с использованием Auth::allow,

Пример, в PagesController:

public function beforeFilter()
{
    parent::beforeFilter();

    $allowedPages = array('home', 'foo', 'bar');
    if(isset($this->request->params['pass'][0]) &&
       in_array($this->request->params['pass'][0], $allowedPages))
    {
        $this->Auth->allow('display');
    }
}

Это позволило бы страницам home, foo а также bar для просмотра без входа в систему.

Если вы хотите сделать все страницы общедоступными, то вы можете просто использовать Auth::allow без каких-либо условий, а именно:

public function beforeFilter()
{
    parent::beforeFilter();
    $this->Auth->allow('display');
}
Другие вопросы по тегам