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');
}