2014-10-17 7 views
0

Я использую CakePHP версии 2.5.4Неверное имя пользователя и пароль, Логин

проблема, я не могу войти, $ this-> Auth-> Логин() возвращает ложное каждый раз !!

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

Я буду признателен, если у вас есть время, чтобы проверить код здесь: https://gist.github.com/anonymous/2e0c6ab6b3b9a8604893

все включено: User.php, UsersController.php, логин .ctp, register.ctp

заранее спасибо ...

ответ

2

Я не уверен, но я думаю, что $this->data не доступен в CakePHP 2.x. Вы должны изменить $this->data на $this->request->data, и все поля будут доступны для Auth.

Какой класс и hashType вы используете в AppController? Вам нужно использовать тот же hashType в AppController и Model.

Пример, App Controller:

public $components = array(
    'Auth' => array(
     'authenticate' => array(
      'Form' => array(
       'passwordHasher' => array(
        'className' => 'Simple', 
        'hashType' => 'sha256' 
       ) 
      ) 
     ) 
    ) 
); 

Модель:

public function beforeSave($options = array()) { 
    if (!empty($this->data[$this->alias]['password'])) { 
     $passwordHasher = new SimplePasswordHasher(array('hashType' => 'sha256')); 
     $this->data[$this->alias]['password'] = $passwordHasher->hash(
      $this->data[$this->alias]['password'] 
     ); 
    } 
    return true; 
} 
+0

Он прав! Используйте данные $ this-> в данных Model и $ this-> request-> в контроллере! функция Логин() { \t если ($ this-> request-> есть ('пост')) { \t \t если ($ this-> Auth-> Логин()) { \t \t \t возврата $ это -> редирект ($ this-> Auth-> перенаправления()); \t} \t \t $ this-> Session-> setFlash («Неверное имя пользователя или пароль, пожалуйста, попробуйте еще раз»); \t} } –

+0

'Контроллер :: $ data' по-прежнему доступен ([** через магические свойства **] (https://github.com/cakephp/cakephp/blob/2.5.4/lib/Cake/Controller /Controller.php#L395)) для обратной совместимости. – ndm

1

нормально в вашем AppController включить эту функцию:

public function beforeFilter() { 
    Security::setHash('sha1'); 

} 

вы говорите, что ваша подпись sha1

теперь в вашей базе данных в вашем поле 'password' должно быть VARCHAR (30) не более 30 символов.

И я не уверен об этой линии в register.ctp, и есть запятая более после того, как истинное это неправильно

<?php echo $this->Form->create('User',array('type' => 'file','novalidate' => true,));?> 

Почему файл? Я вещь, которая просто должна быть эта

<?php echo $this->Form->create('User');?> 

и NOVALIDATE могут быть инициализированы в базе данных с правдой, то только перейти на новое значение

Ok. Я сказал вам, что вы должны добавить в AppController, теперь добавьте это в UserController. Это то, что происходит, когда вы смотрите на форму для хранения информации о пользователях много раз, чтобы использовать ключ шифрования sha1, и это шифрование, которое мы храним в базе данных во время регистрации. Но часто это не то же самое, когда регистрация может быть отправлена ​​с другим типом шифрования, и что происходит, когда при проверке данных для проверки подлинности сравнивается (sha1 (регистрация паролей) == другое шифрование (пароль для входа)), потому что спецификация beforeFilter в Ключ шифрования.

добавил это и изменения в контроллере пользователя:

public function beforeFilter() { 
     parent::beforeFilter(); 
    } 
    public function login() { 
     if ($this->request->is('post')) { 
      if ($this->Auth->login()) { 
       if($this->Auth->user('activated')==1){ 
        $this->Session->setFlash(__('Bienvenido, '. $this->Auth->user('username'))); 
        return $this->redirect($this->Auth->redirectUrl()); 
       }else{ 
        $this->Session->setFlash(__('Your Email is not verified. Please verify and try again.')); 
        $this->redirect($this->Auth->logout()); 
       } 
      } else { 
       $this->Session->setFlash(__('Invalid Username or Password please try again')); 
      } 
     } 
    } 
+0

, но sha1 не связан с паролем, в котором он хеширует токен, который я отправляю в ссылку активации. Тип формы - это файл, потому что у меня было поле для загрузки аватара, но не более того, и я забыл его удалить, так или иначе получив недопустимое имя пользователя и пароль, даже с этими изменениями. – Exchanger13

+0

изменить мой ответ. Я думал, что это имеет какое-то отношение к хэш пароля. – CoolLife

+0

Попробуйте переместить это условие (если ($ results ['User'] ['activated'] == 1)) для Auth Configure Scope: http://book.cakephp.org/2.0/ru/core-libraries/components /authentication.html#configuring-authentication-handlers Отлаживайте свои пароли, чтобы узнать, есть ли хешированный пароль из формы == hashed password из вашей базы данных http://book.cakephp.org/2.0/ru/core-libraries/components /authentication.html#hashing-passwords Использовать тот же hashType! –

0

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

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

Просто добавьте этот код в model.Then сделал пользователь again.If вы уже добавить этот код в вашей модели, то увидеть database.Is этого сохранения хэширования пароля? Если да, то эта ошибка может произойти по другой причине, если вы измените свою соль безопасности после того, как пользователь. Вы можете решить эту проблему, сделав нового пользователя. Теперь спросите, как вы сделаете пользователя?

В вашем AppController добавить

$this->Auth->allow();

в вашем beforeFilter() method.Then идти снова в вашем браузере, и вы можете получить доступ, чтобы сделать новый user.After сделать пользователь снова попробовать login.I думать это будет работать.

Смежные вопросы