사용자가 비밀번호를 변경할 수있는 페이지가 있습니다. 양식에는 현재 암호 (old_pass), 새 암호 (pass) 및 새 암호 확인 (pass_confirm)의 세 필드가 들어 있습니다. 문제는 모델 정의에서 필드가 유효하지 않고 빈 필드가 허용되지만 필드가 허용되지 않는다는 것입니다. 이유는 모르겠지만 등록시 비슷한 양식을 가지고 있지만 잘 작동하고이 필드에 대한 유효성 검사 오류를 표시합니다.cakephp가 비밀번호 필드를 확인하지 않음
$this->User->validationErrors
을 표시하면 배열이 비어 있습니다. 하지만 유효성 검사가 끝났습니다. 사용자 작성시에만 활성화되는 사용자 이름 유효성 검사가 있으며 User
양식 (thischange 암호 양식 포함)에 대해 활성화하면 유효성 검사 오류가 제대로 표시됩니다.
<?php echo $this->Form->create('User');?>
<fieldset>
<legend><?php __('Change password'); ?></legend>
<?php
echo $this->Form->input('User.old_pass', array('type' => 'password',
'label' => __('Current password', true)));
echo $this->Form->input('User.pass', array('type' => 'password',
'label' => __('New password', true)));
echo $this->Form->input('User.pass_confirm', array('type' => 'password',
'label' => __('Repeat password', true)));
?>
</fieldset>
<?php echo $this->Form->end(__('Submit', true));?>
이 입력을 할 수있는 뭔가가있는 validate
배열 부분은 다음과 같습니다
'pass' => array(
'required' => array(
'rule' => array('custom','/^.*[0-9].*$/i'),
'message'=>'Password must contain numbers',
'allowEmpty' => false
),
'length' => array(
'rule' => array('minLength',8),
'message' => 'Password must be at least 8 characters long')
),
'pass_confirm' => array(
/*'required' => array(
'rule' => 'notempty',
'message' => 'You have to confirm the password',
'allowEmpty' => false
),*/
'validate' => array(
'rule' => 'validate_password',
'message'=>'Your passwords don\'t match!')
),
'old_pass' => array(
'length' => array(
'rule' => array('minLength',8),
'message' => 'Password must be at least 8 characters long'),
'allowEmpty' => false
)
function validate_password(){
//return false;
$passed=false;
if(isset($this->data['User']['pass_confirm']) && $this->data['User']['pass_confirm']!=''){
if ($this->data['User']['pass'] != $this->data['User']['pass_confirm']){
$this->invalidate('pass');
} else {
$passed=true;
}
}
return $passed;
}
을, BTW 나는 validate_password
함수에서 return false;
행의 주석을 해제 할 때, 아무 것도 방법이 아닌 그렇게 일어나지 않는다 전혀 불렀다.
사용자를 $this->User->save($data)
으로 저장하면 $data
변수에 데이터를 포함하고 있습니다.이 데이터는 프로퍼티 형식으로 저장하고 정상적으로 작동합니다.
function validate_password($check){
문제 야? 나는 똑같은 문제를 겪고있다. 이상하게도, 저장 실패 후 컨트롤러의 validationErrors에 대한 디버그 호출을 수행하면 change_password 액션은 저장된 일부 오류가 있음을 보여줍니다. 그러나 여전히 아무것도 형태로 나타나지 않습니다. – tokes
실제로 초를 기다립니다. 'save'를 호출하면 사용자 ID와 전체 암호 만 전달하게됩니다. 당신은'pass'와'pass_confirm'을 패스하지 않습니다. 그것이 왜 아무 것도 입증하지 못하는 이유 일 수 있습니까? – tokes