CakePHP: Предотвратить сообщение authError компонента Auth на домашней странице - PullRequest
1 голос
/ 15 сентября 2011

У меня есть проект CakePHP, в котором я изменил «app / config / rout.php», чтобы корень указывал на действие «приборной панели» контроллера «Пользователи».Другими словами, эти два URL-адреса идут в одно и то же место:

http://example.com/

http://example.com/users/dashboard

В моем "приложении" настроен компонент "Auth""контроллер, например, так:

class AppController extends Controller {
    var $components = array('Auth', 'Session');

    function beforeFilter() {
        $this->Auth->authorize = 'controller';
        $this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'dashboard');

        if ($this->Auth->user()) {
            $this->set('logged_in', true);
        }
        else {
            $this->set('logged_in', false);
        }
    }
}

Я хочу, чтобы если пользователь, не прошедший проверку подлинности, сразу перешел на http://example.com/users/dashboard, его перенаправили на страницу входа с Появляется сообщение «authError» компонента «Auth», но если они переходят на http://example.com/, они перенаправляются на страницу входа без отображения сообщения «authError» компонента «Auth».Это возможно?

Ответы [ 4 ]

1 голос
/ 15 сентября 2011

Я решил эту проблему, добавив следующий код в действие «login» моего контроллера «Users»:

if ($this->Session->read('Auth.redirect') == $this->webroot && $this->Session->read('Message.auth.message') == $this->Auth->authError) {
    $this->Session->delete('Message.auth');
}
0 голосов
/ 14 января 2018

Если вы действительно хотите запретить сообщение authError на домашней странице и просто перенаправить на страницу входа в систему, тогда вы должны поставить false в качестве параметра authError

class AppController extends Controller {

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

        $this->loadComponent('RequestHandler');
        $this->loadComponent('Flash');
        $this->loadComponent('Auth', [
            'authError' => false
        ]);
    }

}
0 голосов
/ 17 декабря 2011

искал что-то подобное давно!Спасибо.

Я должен был сделать небольшое изменение, тогда $this->webroot это не "/":

if (str_replace("//","/",$this->webroot.$this->Session->read('Auth.redirect')) == $this->webroot && $this->Session->read('Message.auth.message') == $this->Auth->authError) {
    $this->Session->delete('Message.auth');
}
0 голосов
/ 15 сентября 2011

Ну, я не понимаю, почему иногда вы показываете ошибку, а почему нет ... но вы можете себе это позволить, создав метод isAuthorized и изменив всю логику поведения по умолчанию AuthComponent.

Откройте ваш компонент Auth и проверьте метод «startup ()». Там, в последней строке, вы увидите следующее:

$this->Session->setFlash($this->authError, $this->flashElement, array(), 'auth');
$controller->redirect($controller->referer(), null, true);

Эта часть отвечает за отображение ошибки.

Перед этим вы увидите ...

if ($this->isAuthorized($type)) {
    return true;
}

Таким образом, вы можете изменить свой метод isAuthorized для изменения этого сообщения, когда захотите.

Много работы для (я думаю ..) ничего.

PS. Там может быть более простой способ игнорировать меня

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...