CakePHP Auth логин, перенаправляющий в неправильные места - PullRequest
0 голосов
/ 19 июля 2011

Мое приложение настроено на постоянное перенаправление на экран входа в систему. Хотя переадресация входа и выхода из игры сводит меня с ума.

Когда я на самом деле авторизируюсь, сначала он будет перенаправлен на URL выхода из системы, затем, если я войду во второй раз, он будет перенаправлен на домашнюю страницу правильно. Затем, когда я выхожу, он перенаправляет на URL входа, а не на URL выхода.

В app_controller.php

public function beforeFilter() {
    $this->Auth->userModel = 'User';
    $this->Auth->loginAction = '/users/login';
    $this->Auth->loginRedirect = '/home';
    $this->Auth->logoutRedirect = '/users/login/1';
    $this->Auth->authError = 'You must be logged in to view this page.';
}

А в users_controller.php

public function login($loggedout = false) {
    if ($this->Session->check('Message.auth')) {
        $this->Session->setFlash('Incorrect username or password.', 'default', array('class' => 'msg error'), 'auth');
    } elseif ($loggedout) {
         $this->Session->setFlash('You have been logged out.', 'default', array('class' => 'msg success'), 'auth');
    }
}

/**
 * Logout action
 */
public function logout() {
    $this->redirect($this->Auth->logout());
}

Понятия не имею, что происходит не так. Похоже, довольно простой компонент для использования. Кстати, я новичок в CakePHP.

в основном, логин должен перенаправлять в / home, а логин должен перенаправлять в / users / login / 1, чтобы я мог снова отобразить сообщение «Вы вышли из системы» над формой логина. Это буквально все, что мне нужно сделать.

Ответы [ 2 ]

0 голосов
/ 19 июля 2011

вот мое предложение:

для app_controller

public function beforeFilter() {
   $this->Auth->loginRedirect = '/home';
   $this->Auth->authError = 'You must be logged in to view this page.';
} 

для users_controller:

public function login() {
     if ($this->Auth->user()){
        $this->redirect($this->Auth->redirect());
    }
}
public function logout() {
   $this->redirect($this->Auth->logout());
}

при входе в систему.ctp, вспыхнуть сообщение об авторизации: echo $session->flash('auth');

По сути, Cake автоматически сделает большую часть того, что вы хотите, поэтому постарайтесь не писать слишком много кода:))

0 голосов
/ 19 июля 2011

У меня нет опыта работы с компонентом Auth, но я подозреваю, что вы делаете это немного сложнее, чем должно быть.В документации ясно, что по умолчанию Auth блокирует доступ ко всем действиям , кроме login() и logout().

. Я бы начал с удаления userModel и * 1008.* декларации (в любом случае вы указываете значения по умолчанию).Также вы, вероятно, можете удалить весь код в login() (оставьте пустую функцию).Вы можете отображать любые сообщения об ошибках из компонента Auth в своем представлении - включите это в свой файл login.ctp:

echo $this->Session->flash('auth');

Обратите внимание, что компонент Auth будет генерировать сообщения, подобные тем, которые есть в вашем коде.Вероятно, проще просто позволить ему сделать свое дело и переопределить то поведение, которое вам действительно необходимо.

Я бы также (временно) удалил объявления loginRedirect и logoutRedirect и посмотрел бы, как все ведет себя какожидается.(По умолчанию вход в систему будет перенаправлен обратно на любую страницу, к которой вы пытались получить доступ, прежде чем войти в систему. Выход из системы будет перенаправлен на страницу входа в систему, с сообщением о том, что вы вышли из системы.добавьте их по одному и протестируйте.

По сути, поскольку вы используете модель User, которую Cake ожидает по умолчанию, вам вряд ли понадобится какая-либо конфигурация - что является одной из приятных особенностей CakePHP.

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