2013-09-27 2 views
2

У меня есть проблема с проверкой Cakephp 2.CakePHP 2 - Подтверждающие поля пароля

Я пытаюсь проверить несколько полей в форме редактирования. Некоторые из них являются паролем и подтверждают пароль.

Я хочу проверить их только в том случае, если они поставляются. Если они пусты, я не изменяю пароль, но если пользователь пишет над ними, я бы хотел проверить, имеют ли они минимальную длину или совпадения паролей.

Код:

'pwd' => array(
      'length' => array(
       'rule'  => array('between', 8, 40), 
       'message' => 'Your password must be between 8 and 40 characters.', 
       'allowEmpty' => true 
      ), 
     ), 
'pwd_repeat' => array(
      'length' => array(
       'rule'  => array('between', 8, 40), 
       'message' => 'Your password must be between 8 and 40 characters.', 
       'allowEmpty' => true 
      ), 
      'compare' => array(
       'rule'  => array('validate_passwords'), 
       'message' => 'The passwords you entered do not match.', 
       'allowEmpty' => true 
      ), 

Я не знаю, если я должен определить некоторые правила при редактировании функции() в контроллере или оно должно быть достаточно, но мой код не работает.

Спасибо!

Edit: (код контроллера)

public function edit($id = null) { 
     if (!$this->User->exists($id)) { 
     throw new NotFoundException(__('Usuario incorrecto')); 
    } 
    if ($this->request->is('post') || $this->request->is('put')) { 

       if ($this->User->save($this->request->data)) { 
        $this->Session->setFlash(__('El usuario ha sido actualizado.')); 
        return $this->redirect(array('action' => 'index')); 
       } else { 
        $this->Session->setFlash(__('El usuario no ha podido actualizarse. Por favor, inténtelo de nuevo.'));  
       } 
       unset($this->request->data['User']['pwd']); 
       unset($this->request->data['User']['pwd_repeat']); 
    } else { 
     $options = array('conditions' => array('User.' . $this->User->primaryKey => $id)); 
     $this->request->data = $this->User->find('first', $options); 
    } 
    $roles = $this->User->Role->find('list'); 
    $this->set(compact('roles')); 
} 

(View Code)

<div id="contenedor" class="users form"> 
<?php echo $this->Form->create('User', array('name' => 'form')); ?> 
<fieldset> 
    <legend><?php echo __('Editar Usuario'); ?></legend> 
<?php 
    echo $this->Form->input('id'); 
    echo $this->Form->input('username', array('label' => __('Usuario'))); 
    echo $this->Form->input('pwd', array('label' => __('Contraseña'), 'type' => 'password', 'name' => 'pass', 'onKeyUp' => 'habilita()', 'value' => '')); 
      echo $this->Form->input('pwd_repeat', array('label' => __('Repite Contraseña'), 'type' => 'password', 'name' => 'rpass', 'disabled' => 'disabled')); 
    echo $this->Form->input('firstname', array('label' => __('Nombre'))); 
    echo $this->Form->input('lastname', array('label' => __('Apellidos'))); 
    echo $this->Form->input('telephone', array('label' => __('Teléfono'))); 
    echo $this->Form->input('email', array('label' => __('Email'))); 
    echo $this->Form->input('role_id', array('label' => __('Rol'))); 
?> 
</fieldset> 
<?php echo $this->Form->end(__('Aceptar')); ?> 

+0

насчет 'функции valdidate_passwords' –

+0

Совет: Read [рабочий-с паролями-в-CakePHP] (http://www.dereuromark.de/2011/08/25/working-with-passwords- in-cakephp /) – mark

+0

@mark Я пробовал ваше решение раньше, но он не работает, как мне нужно. Ваше решение позволило мне оставить поля пароля пустыми, но не проверять, поставляются ли они. Я думаю, что я делаю что-то неправильно – Luis

ответ

6

сделать правила проверки, как этот

'pwd' => array(
    'length' => array(
     'rule'  => array('between', 8, 40), 
     'message' => 'Your password must be between 8 and 40 characters.', 
    ), 
), 
'pwd_repeat' => array(
    'length' => array(
     'rule'  => array('between', 8, 40), 
     'message' => 'Your password must be between 8 and 40 characters.', 
    ), 
    'compare' => array(
     'rule'  => array('validate_passwords'), 
     'message' => 'The passwords you entered do not match.', 
    ) 
) 

И ваша функция validate_passwords должна быть ли это это.

public function validate_passwords() { 
    return $this->data[$this->alias]['pwd'] === $this->data[$this->alias]['pwd_repeat'] 
} 
+0

Мне нужно, чтобы пользователи оставляли поля pwd и pwd_repeat пустыми, поэтому пароль не меняется, но если пользователь предоставил что-либо, тогда я хочу проверить эти поля – Luis

+0

, вы можете сделать его allowEmpty равным true. можете ли вы сказать мне, где вас поразили. –

+0

С allowEmpty я решил, что пользователи могут оставить пустой пароль (неизменный пароль), но я борюсь за проверку этих полей, если они не пусты (пользователь хочет изменить свой пароль). Я не знаю, почему в этом случае правила проверки не работают. – Luis

Смежные вопросы