Проверка пользователя не работает должным образом в CakePHP через модель пользователя - PullRequest
0 голосов
/ 03 октября 2011

По какой-то причине я не могу заставить эту проверку работать так, как мне хотелось бы, особенно с полем пароля minLength.

Все остальное в порядке (даже minLength для имени пользователя работает).По какой-то причине, когда я добавляю то же правило minLength в поле пароля, он просто игнорирует его, а когда я действительно ввожу пароль, он говорит мне, что мне нужно ввести пароль:

    var $validate = array(
'email' => array(
    'email' => array(
        'rule' => array('email', true),
        'required' => true,
        'allowEmpty' => false,
        'message' => 'Please enter a valid email address'
    ),
    'isUnique' => array(
        'rule' => 'isUnique',
        'message' => 'This email is already in use'
    )
),
'username' => array(
    'notEmpty' => array(
        'rule' => 'notEmpty',
        'required' => true,
        'message' => 'Please enter a valid username'
    ),
    'allowedCharacters' => array(
        'rule' => '/^[a-zA-Z]+[0-9]*$/',
        'message' => 'Please enter a valid username'
    ),
    'minLength' => array(
        'rule' => array('minLength', 3),
        'message' => 'Please enter a longer username'
    ),
    'maxLength' => array(
        'rule' => array('maxLength', 23),
        'message' => 'Please enter a shorter username'
    ),
    'isUnique' => array(
        'rule' => 'isUnique',
        'message' => 'That username is already taken'
    )
),
'password' => array(
    'notEmpty' => array(
        'required' => true,
        'allowEmpty' => false,
        'message' => 'Please enter a password'
    ),
    'minLength' => array(
        'rule' => array('minLength', 4),
        'message' => 'Please enter a longer password'
    ),
     'passwordConfirm' => array(
        'rule' => array('checkPasswords'),
        'message' => 'Passwords must match'

       )
    ),
   );

Я пропускаю что-то незначительное?Это сводит меня с ума.

Ответы [ 3 ]

5 голосов
/ 03 октября 2011

Это происходит потому, что в Cake поле пароля автоматически хешируется, как только вы его отправляете; что нарушит ваши правила проверки (пароль из 5 символов внезапно становится хешем из 40 цифр). Существуют различные предлагаемые исправления для этой проблемы .

Тот, который звучит наиболее многообещающе:

Создайте два поля, например pw и pw_confirm, в отличие от password и confirm_password. Используйте эти значения для проверки пароля (максимальная длина и т. Д.)

Тогда что-то вроде:

$this->User->set($this->data);
if ($this->User->validates()) {
    // all your data validates, so hash the password submitted,
    // ready for storage as normal.
    $password_hash = $this->Auth->password($this->data['User']['pw'];
    $this->data['User']['password'] = $password_hash;
}

Таким образом, Cake не будет автоматически хэшировать введенный пропуск, позволяя вашей валидации функционировать так, как вы предполагали.

Чтобы визуализировать это, добавьте это к вашему register / add user методу:

function admin_add() {
    if (!empty($this->data)) {
        debug($this->data); 
        exit;

Вы получите:

Array
(
    [User] => Array
        (
            [username] => somename
            [password] => 25ae3c1689d26b20e03abc049982349482faa64e
        )

)

до проверки.

2 голосов
/ 03 октября 2011

Похоже, у вас есть небольшая ошибка в массиве проверки.

Каждая проверка для поля должна иметь ключ 'rule', а у вас его нет в проверке 'notEmpty'.

Попробуйте обновить проверку пароля следующим образом:

<?php
array(
'password' => array(
    'notEmpty' => array(
        'rule' => 'notEmpty',
        'required' => true,
        'allowEmpty' => false,
        'message' => 'Please enter a password'
    ),
    'minLength' => array(
        'rule' => array('minLength', 4),
        'message' => 'Please enter a longer password'
    ),
     'passwordConfirm' => array(
        'rule' => array('checkPasswords'),
        'message' => 'Passwords must match'

       )
))
?>

Также обратите внимание, что если вы используете компонент Auth, ваш пароль будет хеширован ДО того, как он будет проверен. Это означает, что даже если вы введете 3-символьный пароль, вы получите 40-символьный хеш, который, очевидно, будет иметь значение, превышающее minLength.

0 голосов
/ 03 октября 2011

использовать мой режим смены пароля.он заботится обо всех этих вещах в едином и чистом месте: http://www.dereuromark.de/2011/08/25/working-with-passwords-in-cakephp/

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

, и к вашей проблеме я уже прокомментировал: «Вы также должны использовать last => true здесь! в противном случае это не имеет большого смысла», я считаю, что это такжечасть вашей проблемы.все ваши правила нуждаются в этом параметре, чтобы он работал правильно.в противном случае сообщения об ошибках будут отключены.

...