次のコードはユーザーのパスワードをハッシュすることができず、パスワードをデータベースにクリアテキストで保存します。パスワードを変更した後は、パスワードがハッシュである必要があるため、ログインできません。 次のコードは、私のモデルです。cakephpでパスワードがハッシュされない
'password_confirm'=>array(
'compare' => array(
'rule' => array('password_match', 'password', true),
'message' => 'Password does not match',
'required' => true,
),
'notempty' => array(
'rule' => array('notempty'),
'message' => 'Confirm password is empty',
'allowEmpty' => false,
'required' => true)
),
'password'=>array(
'notempty' => array(
'rule' => array('notempty'),
'message' => 'Password is empty',
'allowEmpty' => false,
'required' => true)
)
function password_match($data, $password_field, $hashed = true)
{
$password = $this->data[$this->alias][$password_field];
$keys = array_keys($data);
$password_confirm = $hashed ?
Security::hash($data[$keys[0]], null, true) :
$data[$keys[0]];
return $password === $password_confirm;
}
次のコードは、私のuser_controllerに
function change_password(){
#CURRENTLY NOT WORKING
$this->layout = "mainLayout";
$in_user_id = $id = $this->Auth->user('id');
if($this->data){
$this->User->validate['password_confirm']['compare']['rule'] =
array('password_match', 'password', false);
$this->User->set($this->data);
$this->User->useValidationRules('ChangePassword');
if($this->User->validates()){
$this->data['User']['id']=$in_user_id;
$this->User->save($this->data,array('validate'=>false));
}
}
}
あなたは「それがクリアテキストでパスワードを保存する」とはどういう意味ですか?私はこの機能のどこにも何も保存すべきではない。 – Farray
'' $ this-> data'の内容は何ですか?その関数に渡すデータについての詳細情報を提供する必要があります。 – xmarcos