Я пытаюсь реализовать систему входа в систему с помощью bcrypt. У меня этот код на методе BeforeSave() модели пользователя:CakePHP 2.4 Вход в систему сбой с использованием bcrypt
public function beforeSave($options = array()) {
if (!$this->id && !isset($this->data[$this->alias][$this->primaryKey])) { // insert
/*Hash the password*/
$this->data['User']['password'] = Security::hash($this->data[$this->alias]['password'], 'blowfish');
/*Set the username the same as the email*/
$this->data['User']['username'] = $this->data['User']['email'];
}
parent::beforeSave($options);
}
Этот код успешно хэшей пароль перед сохранением в БД.
Для процедуры входа в систему, я эту форму в представлении:
echo $this->Form->create('User', array('action' => 'login'));
echo $this->Form->input('username', array(
'class' => 'login-input',
'placeholder' => $input_username_default_text,
'id' => 'username',
'label' => false,
'div' => false,
'type' => 'text'
));
echo $this->Form->input('password', array(
'class' => 'login-input',
'placeholder' => $input_password_default_text,
'id' => 'password',
'label' => false,
'div' => false,
'type' => 'text'
));
echo $this->Form->submit(__('SIGN IN'), array(
'class' => 'login-input',
'type' => 'submit'
));
... А потом в методе UsersController Логин():
public function login() {
$this->set('body_class', 'login-page');
if ($this->request->is('post')) {
if ($this->Auth->login()) { //Always fails...
debug('HELLO '.$this->session->read('Auth.User'));
} else {
}
}
}
Мой AppController.php
class AppController extends Controller {
public $components = array(
'Auth' => array(
'authenticate' => array(
'Form' => array(
'passwordHasher' => 'Blowfish'
)
)
)
);
}
Логин, используя этот код, всегда терпит неудачу. Любая догадка о том, что я делаю неправильно?
EDIT 1:
Хорошо, я копал в рамках пытаясь понять, где эта процедура не удается. И в этом методе:
// class BlowfishPasswordHasher
public function check($password, $hashedPassword) {
return $hashedPassword === Security::hash($password, 'blowfish', $hashedPassword);
}
... за $ hashedPassword (что хранится в БД) отличается от того, что возвращается из безопасности :: хэш ($ пароль, 'Blowfish', $ hashedPassword). Таким образом, вход в систему не работает. Однако я понятия не имею, почему это происходит.
в моей отладки были получены эти результаты:
$ hashedPassword - $ 2a $ 10 $ f39m7NJBx3fIBrqq/9TZEueNJICJiO1dq1LZKlneF7Y (Спички, что хранится в столбце пароля таблицы пользователей)
результат из Безопасность :: хэш() метод: $ 2a $ 10 $ f39m7NJBx3fIBrqq/9TZEueNJICJiO1dq1LZKlneF7Ykvm35emcPm
Если вы заметили, что они такие же, за исключением того, что результат этого метода имеет 10 дополнительных символов.
Как может beforeSave() фактически создать функцию save(), когда вы никогда не вернетесь сюда? Я не думаю, что спасение на самом деле происходит здесь. – mark
Ну ... это спасает, поверь мне. Я думаю, это потому, что родительский метод возвращает true. – bfilipesoares
Нет, родительский вызов проглатывается, и вместо него здесь возвращается void. Вы должны это исправить, даже если это не проблема. – mark