模型
App::uses('SimplePasswordHasher', 'Controller/Component/Auth');
class AppModel extends Model {
public function beforeSave($options = array()) {
if (!empty($this->data[$this->alias]['password'])) {
$passwordHasher = new SimplePasswordHasher(array('hashType' => 'sha1'));
$this->data[$this->alias]['password'] = $passwordHasher->hash(
$this->data[$this->alias]['password']
);
}
return true;
}
因此,当我使用它时,它会对密码进行哈希处理,但是当我尝试登录时,我必须使用哈希值,而不是原始密码。然后只有它登录。
我在这里问过如何加密,但它无法帮助登录How to encrypt a password in cakephp 2.x version
答案 0 :(得分:1)
使用在数据库中存储为哈希的密码登录时,您需要将相同的哈希方法应用于输入密码,并将其与存储在数据库中的密码进行比较: -
// Has the password supplied via the login form.
$inputHashedPassword = (new SimplePasswordHasher(['hashType' => 'sha1']))->hash($inputPassword);
// Compare hashed input with hashed password from the database.
if ($inputHashedPassword === $storedHashedPassword) {
// Login
}
散列密码的重点在于它无法解密,因此只有输入密码的人才应该知道其原始值。因此,检查密码的唯一方法是检查散列值。