ユーザーがパスワードを変更できるページがあります。このフォームには、現在のパスワード(old_pass)、新しいパスワード(pass)、新しいパスワード確認(pass_confirm)の3つのフィールドがあります。問題は、フィールドが検証されず、モデル定義で禁止されているにもかかわらず空白のフィールドが許可されるということです。私はなぜ、私は登録にシンプルな形を持っているが、1つはうまく動作し、これらのフィールドの検証エラーを表示する理由は知らない。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;
}
をところで、私はvalidate_password
機能でreturn false;
行のコメントを解除したときに、何も方法がないので、起こりませんすべてで呼ばれる。
私は$this->User->save($data)
でユーザーを保存していますが、$data
変数には、プロパー形式で保存したいデータが含まれています。
function validate_password($check){
あなたはこれまでに問題ですか?私はまったく同じ問題を抱えています。不思議なことに、保存が失敗した後にコントローラのvalidationErrorsでデバッグコールを実行すると、change_passwordアクションによっていくつかのエラーが保存されていることが示されます。しかし、まだ、何もフォームに表示されません。 – tokes
実際には1秒待ってください。 'save'を呼び出すと、ユーザーのIDと完全なパスワードだけが渡されます。あなたは 'pass'と' pass_confirm'を渡しません。それが何かに対して妥当性を確認していないのはなぜですか? – tokes