5

У меня возникли проблемы с получением компонента Auth, который выполняет перенаправления, которые я хочу использовать в приложении CakePHP 1.2.6.Проблема с переадресацией компонента Auth компонента CakePHP

У меня есть форма входа в систему, которая отображается на всех страницах, и я хочу, чтобы пользователь оставался на странице, в которую он входит. Например, если он просматривает профиль другого пользователя, я хочу оставить его там после входа в систему, а не перенаправить его на действие $this->Auth->loginRedirect. Кроме того, еще одна вещь о моем приложении заключается в том, что у меня нет страниц с «аутентифицированным доступом», каждая страница доступна для всех, но если вы вошли в систему, вы получаете дополнительные функции.

То, что я понял из чтения documentation является то, что мне нужно установить autoRedirect к ложным, чтобы получить код в функции Логин() должны быть выполнены:

class UsersController extends AppController {  
    var $name = 'Users'; 
    var $helpers = array('Html', 'Form','Text'); 

    function beforeFilter() { 
     $this->Auth->autoRedirect = false; 
    } 

    function login() { 
     $this->redirect($this->referer()); 
    } 

    function logout() { 
     $this->redirect($this->Auth->logout()); 
    } 

    /* [...] */ 
} 

Это в настоящее время разрушает мою проверку подлинности. Я заметил (из журналов), что, если я оставил перенаправление в функции входа и установил autoRedirect в значение false, поле пароля в $this->data в функции login() будет пустым.

Ниже я отправил содержимое AppController, которые относятся к компоненту Auth: Я не могу понять, что я делаю неправильно

public function beforeFilter() { 

    $this->Auth->fields = array(
     'username' => 'email',    
     'password' => 'password'    
    ); 

    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');  
    $this->Auth->loginRedirect = array('controller' => 'usercars', 'action' => 'homepage'); 

    $this->allowAccess(); 

    // build wishlist if the user is logged in 
    if ($currentUser = $this->Auth->user()) { 
     $wishlists = $this->buildWishlist($currentUser); 
     $this->set('wishlists', $wishlists); 
    } 

} 

private function allowAccess() { 
     if(in_array($this->name, /* all my controller names */)) { 
      $this->Auth->allow('*'); 
     } 
} 

.

ответ

10

Добавить parent :: beforeFilter(); к beforeFilter в контроллере пользователя:

function beforeFilter() { 
    $this->Auth->autoRedirect = false; 
    parent::beforeFilter(); 
} 

Вы также можете заменить редирект с этим к способу входа в систему контроллера пользователя:

$this->redirect($this->Auth->redirect()); 

auth-> переадресовать() возвращает URL, где пользователь приземлился перед тем, как попасть на страницу входа в систему или Auth-> loginRedirect.

+0

спасибо: D. Вызов родителя полностью проскользнул. –

0

Поместите этот код в контроллер:

function beforeFilter() { 
    $this->Auth->allow('login', 'logout'); 
    $this->Auth->autoRedirect = false; 
    parent::beforeFilter(); 
} 

и, добавим для страницы входа:

function login() { 
    if($this->Auth->User()) { 
     $this->redirect(array('action'=>'welcome'), null, true); 
    } 
}