0

パスワード変更機能に検証を追加しようとしていますが、機能しません。

私が追加しました

->add('repeat_password', [
                          'equalToPassword' => [
                                                'rule' => function ($value, $context) {
                                                    return $value === $context['data']['new_password'];
                                                },
                                                'message' => __("Your password confirm must match with your password.")
                                               ]
                         ]);

Usersモデルと私のコントローラーで

$user = $this->Users->get($this->_User['user_id']);
        if ($this->request->is(['patch', 'post', 'put'])) {
            $user = $this->Users->createEntity($user, ['password' => $this->request->data['repeat_password']]);
           // $verify = (new DefaultPasswordHasher)->check($this->request->data['old_password'], $user->password);
           // debug($verify);
           //if ($verify) {
            if ($this->Users->save($user)) {
                $this->Flash->success('The password has been changed');
                $this->redirect(['action' => 'index']);

            } else {
                $this->Flash->error('Password could not be issued');

            }
           }
        //   else {

           //    $this->Flash->error('Password Do not match');

        //   }
     //   }
    }

検証せずにデータを保存します。解決策は何ですか?

4

2 に答える 2

1

compareWithコードを完全にチェックしていないので、CakePHP 3にはこの目的のためにビルトインのバリデーターがすでに用意されているのではないかと最初に考えました。

次のように検証ルールを設定してみてください。

$validator->add('repeat_password', [
    'compareWith' => [
        'rule' => ['compareWith', 'new_password'],
        'message' => __("Your password confirm must match with your password.")

    ]
]);

また、配列内でnew_passwordとの両方repeat_passwordが に設定されていることを確認します。true$_accessible

于 2015-12-13T10:33:27.093 に答える
0
 public $validate = array(

    'password' => array(
        'required' => array(
            'rule' => array('notEmpty'),
            'message' => 'A password is required'
        ),
        'min_length' => array(
            'rule' => array('minLength', '6'),  
            'message' => 'Password must have a mimimum of 6 characters'
        )
    ),

    'password_confirm' => array(
        'required' => array(
            'rule' => array('notEmpty'),
            'message' => 'Please confirm your password'
        ),
         'equaltofield' => array(
            'rule' => array('equaltofield','password'),
            'message' => 'Both passwords must match.'
        )
    ),




)

モデルにコードを記述してください。詳細については、以下のリンクを確認してください http://miftyisbored.com/a-complete-login-and-authentication-application-tutorial-for-cakephp-2-3/

于 2015-12-14T12:40:12.330 に答える