Руководство по простой аутентификации CakePHP не работает

Я новичок в CakePHP. Я пробую руководство по кулинарной книге Cake простая аутентификация с CakePHP 2.4.1.
Я всегда получаю сообщение "Неверное имя пользователя или пароль, попробуйте еще раз", хотя я ввел правильное имя пользователя и пароль.

public function login() {
    if ($this->request->is('post')) {
        if ($this->Auth->login()) {
            return $this->redirect($this->Auth->redirect());
        }
        $this->Session->setFlash(__('Invalid username or password, try again'));
    }
}

Согласно API AuthComponent, если параметр Auth->login() пуст или нет указано, запрос будет использоваться для идентификации пользователя. Выходные данные отладочного запроса показывают

SELECT `User`.`id`, `User`.`username`, `User`.`password`, `User`.`role`, `User`.`created`, `User`.`modified` 
FROM `cake_dvdcatalog`.`users` AS `User` WHERE `User`.`username` = 'admin' LIMIT 1

Вот моя модель пользователя:

// app/Model/User.php
App::uses('AuthComponent', 'Controller/Component');

class User extends AppModel {

    public $validate = array(
        'username' => array(
            'required' => array(
                'rule' => array('notEmpty'),
                'message' => 'A username is required'
            )
        ),
        'password' => array(
            'required' => array(
                'rule' => array('notEmpty'),
                'message' => 'A password is required'
            )
        ),
        'role' => array(
            'valid' => array(
                'rule' => array('inList', array('admin', 'author')),
                'message' => 'Please enter a valid role',
                'allowEmpty' => false
            )
        )
    );

    public function beforeSave($options = array()) {
        if (isset($this->data[$this->alias]['password'])) {
            $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']);
        }
        return true;
    }
}

person Sithu    schedule 11.10.2013    source источник
comment
Можете ли вы опубликовать свой код для вашей пользовательской модели?   -  person Andrew    schedule 11.10.2013
comment
@Андрей, Конечно. Я отредактировал свой вопрос.   -  person Sithu    schedule 11.10.2013
comment
Попробуйте отладить метод $this-›Auth-›login(). Зашифрованный пароль должен быть таким же, как в базе данных.   -  person Dezigo    schedule 11.10.2013


Ответы (4)


Вы должны проверить свой зашифрованный пароль, Cakephp по умолчанию использует SHA1, поэтому лучше создать пользователя, используя Cakephp с паролем SHA1, добавить метод beforesave в модель пользователя для шифрования пароля

person Sameer    schedule 27.04.2014

Компонент аутентификации входит в контроллер, а не в модель. Попробуйте удалить это из модели:

App::uses('AuthComponent', 'Controller/Component');

И добавить его в AppController. Также добавьте это в контроллер приложения:

public $components = array('Auth');

Вам может понадобиться дополнительная настройка, если вы хотите использовать настройки не по умолчанию.

person Chuck Burgess    schedule 12.10.2013
comment
Согласно руководству по поваренной книге, $components = array('Auth'); уже определено в AppController. - person Sithu; 15.10.2013
comment
Вам необходимо 1) убедиться, что фактический файл AppController включает компонент. 2) исходный пост выше показывает, что вы загружаете компонент аутентификации в модель пользователя, что неверно. Компоненты соответствуют контроллерам, а не моделям. - person Chuck Burgess; 15.10.2013
comment
Само руководство по поваренной книге показывает, что компонент Auth загружается как в пользовательскую модель, так и в AppController. Во всяком случае, я удалил его из модели. - person Sithu; 16.10.2013

Я думаю, вы что-то упустили, пожалуйста, убедитесь, что вы следовали тому же руководству по CakePHP 2.x http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html.

Пожалуйста, создайте пользователя http://localhost/application_name/users/add после всех настроек и попробуйте с этим пользователем. Это работает для меня.

person Vikash Pathak    schedule 12.10.2013

Убедитесь, что у вас есть следующий элемент в массиве $components в файле AppController.php:

'authenticate' => array(
   'Form' => array(
       'passwordHasher' => 'Blowfish'
   )
)
person CalebM    schedule 29.12.2014