2014-07-24 5 views
2

Может ли кто-нибудь помочь мне с помощью cakephp 2.4.2 auth с помощью blowfish, я новичок в cakephp auth, поэтому я искал его, но не нашел решения для моей проблемы.Проверка blowfish в cakephp 2.4.2

Вот мой код

для App Controller

public $components = array(
    'Session', 
    'RequestHandler', 
    'Auth' => array(
     'authenticate' => array(
      'Form' => array(
       'passwordHasher' => 'Blowfish' 
      ) 
     ) 
    ) 
); 

Для модели

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

Для контроллера

   if ($this->Auth->login()) { 
        $this->redirect(array('controller' => 'admins', 'action' => 'dashboard', 'builder' => true)); 
       } else { 
        $this->Session->write('flash', array('You Have entered wrong username or password.', 'failure')); 
        $this->redirect(array('controller' => 'users', 'action' => 'login', 'builder' => true)); 
       } 
+0

Что не работает? –

+0

Не удалось аутентифицировать пользователя. –

+0

«Безопасность :: хэш» устарела, вместо этого используйте классы хеш-ов пароль, если это возможно. – mark

ответ

1

Попробуйте это в AppController:

$this->Auth->authenticate = array(
     AuthComponent::ALL => array(
      'userModel' => 'User', 
      'fields' => array(
       'username' => 'email', 
       'password' => 'password' 
      ), 
      'scope' => $user_scope, 
     ), 'Form'=> array(
       'passwordHasher' => 'Blowfish' 
      ) 
    ); 
+1

Thanx alot, It! ! –

2

Для Blowfish Вы должны предоставить соли, что это bcrypt соль

из Docs http://book.cakephp.org/2.0/en/core-utility-libraries/security.html#Security::hash

// Create a hash using bcrypt 
Security::setHash('blowfish'); 
$salt = Security::hash(Configure::read('Security.salt')); 

// $salt is a previously generated bcrypt salt. 
$passwordHash = Security::hash($password, 'blowfish', $salt);  

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

во время пользователя использования входа в этот сценарий

  • 1) Принеси соль и хэш пароля из базы данных
  • 2) с использованием соли и простого текста, пароль, предоставленный пользователем при входе в систему для генерации хэш пароля
  • 3) сравнить вновь созданный хэш пароля с тем, что было выбрано из db.
  • 4), если они совпадают логин пользователя, в противном случае показать ошибки

для входа if ($this->Auth->login($userData)) { и $userData должен быть массив как

array ('username' => 'the_username', 'password' => 'the_password'); 

аутентификации:

$userData = $this->User->findByEmail('[email protected]', array('username', 'password', 'salt')); 

$passwordHash = Security::hash($userPlainTextPassword, 'blowfish', $userData['User']['salt']); 

if ($passwordHash == $userData['User']['password']) { 
    if ( $this->Auth->login($userData['User'])) { 
    // ok 
    } else { 
    // smth wrong 
    } 
} else { 
    // wrong username or password 
} 

Кстати, для сравнения хэшей лучше использовать стандартное сравнение времени, читайте здесь

https://crackstation.net/hashing-security.htm#properhashing

+0

Thanx for the rply, просто давая ему попробовать –

+0

Я могу сделать хэш правильно, но проблема в аутентификации пользователя. –

+0

@tiGer, я обновил ответ – hashmode