2013-10-11 4 views
3

Я новичок в CakePHP. Я пытаюсь the Cake cookbook tutorial of simple authentication с CakePHP 2.4.1.
Я всегда получаю «Неверное имя пользователя или пароль, повторите попытку», хотя я набрал правильное имя пользователя и пароль.CakePHP простая проверка подлинности не работает

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')); 
    } 
} 

Согласно the AuthComponent API, если параметр 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; 
    } 
} 
+0

Можете ли вы разместить свой код для своей модели пользователя? – Andrew

+0

@ Андрей, конечно. Я отредактировал мой вопрос. – Sithu

+0

Попробуйте отладить $ this-> Auth-> login(). Зашифрованный пароль должен быть таким же, как в базе данных. – Dezigo

ответ

0

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

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

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

public $components = array('Auth');

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

+0

Согласно учебнику поваренной книги '$ components = array ('Auth');' уже определен в 'AppController'. – Sithu

+0

Вам необходимо: 1) убедиться, что файл AppController содержит компонент. 2) исходное сообщение выше показывает, что вы загружаете компонент auth в пользовательскую модель, что неверно. Компоненты соответствуют контроллерам, а не моделям. –

+0

Само по себе руководство поваренной книги показывает, что компонент Auth загружен как в пользовательской модели, так и в AppController. Во всяком случае, я удалил его из модели. – Sithu

0

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

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

1

Вы должны проверить шифрованный пароль, CakePHP По использованию По умолчанию SHA1, так это Бетер создать пользователь с помощью CakePHP с SHA1 паролем Добавить BeforeSave метода в модели пользователя для шифрования пароля

0

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

'authenticate' => array(
    'Form' => array(
     'passwordHasher' => 'Blowfish' 
    ) 
) 
Смежные вопросы