Почему имя пользователя и пароль Auth Component не работают автоматически, как ожидалось в CakePHP? - PullRequest
2 голосов
/ 06 июня 2009

Я пытаюсь создать страницу регистрации для моего сайта, у меня проблемы с компонентом Auth,

function beforeFilter() {
    $this->Auth->loginAction = array('controller'=>'users','action'=>'login');
    $this->Auth->loginRedirect = array('controller'=>'users','action'=>'landing');
    $this->Auth->logoutRedirect = array('controller'=>'users','action'=>'home');

    // These pages do not require authenication<br/>
    $this->Auth->allow('home','register','activate','forgot','reset','_sendEmail','reset');
}

Я шифрую и храню пароли в базе данных, используя метод $this->Auth->password, теперь, даже когда я успешно вхожу в систему, меня не перенаправляют на целевую страницу под контроллером пользователей, я пытался распечатать $this->Auth, и он говорит

[loginError] => Login failed. Invalid username or password.
[authError] => You are not authorized to access that location.

Кроме того, в моей базе данных поля, по которым я использую аутентификацию, являются адресом электронной почты и паролем, я где-то читал, что AuthComponent требует, чтобы в полях были имя пользователя и пароль для работы автомата

Я не могу понять, что я делаю неправильно, даже после входа в систему, если я пытаюсь указать моему браузеру на http://cake.localhost/users/register, он должен автоматически перенаправить меня на целевую страницу, но по какой-то причине это не так.

Какие-нибудь подсказки относительно того, где я иду не так?

Шив

Ответы [ 5 ]

3 голосов
/ 11 июня 2009

Из кулинарной книги CakePHP:

По умолчанию AuthComponent ожидает, что у вас будет таблица 'users' с полями 'username' и 'password'.

Интересно, будет ли работать автоматик, если вы используете email в качестве имени поля?

Попробуйте добавить это в ваш beforefilter:

function beforeFilter() {
    $this->Auth->fields = array(
        'username' => 'email', 
        'password' => 'password'
    );
}
1 голос
/ 06 июня 2009

Попробуйте $ this-> Auth-> allowActions = array ('*'); в beforeFilter () контроллера (не в app_controller).

0 голосов
/ 02 августа 2011

В вашем app_controller.php

function beforeFilter() {
    $this->Auth->fields = array( 'username' => 'email', 'password' => 'password' );
    $this->Auth->loginAction = array('controller'=>'users','action'=>'login');
    $this->Auth->loginRedirect = array('controller'=>'users','action'=>'landing');
    $this->Auth->logoutRedirect = array('controller'=>'users','action'=>'home');
}

В вашем контроллере пользователя:

function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow(list of your allowed actions);
}
0 голосов
/ 11 июня 2009

Способ, которым я решил это, и это действительно взлом, я переименовал поле формы в password2, а затем в своем методе контроллера я установил


$this->data['password] = $this->data['password2]

Тогда я позвонил


$this->Auth->login($this->data)

и, похоже, сработало. Я не думаю, что это лучший способ, однако он сработал, и я буду продолжать, пока не найду лучшее решение.

0 голосов
/ 06 июня 2009

Если вы используете CakePHP 1.2, вам нужно изменить:

$this->Auth->allow('home','register','activate','forgot','reset','_sendEmail','reset');

до

$this->Auth->allow(array('home','register','activate','forgot','reset','_sendEmail','reset'));

Обратите внимание на добавленный "array ()" в функции allow.

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