Я пытаюсь написать базовую страницу регистрации пользователя, и моя проблема заключается в проверке строки длины password. Я читал о различных проблемах и решениях по этому поводу, но у меня все еще проблемы.

Вот что я написал:

class UsersController extends AppController {

    function register () {
        if (!empty ($this->data)) {
            if ($this->data['User']['password'] == $this->Auth->password($this->data['User']['password_confirm'])) {
                if ($this->User->save($this->data)) {
                    $this->Session->setFlash('All ok');
                    $this->redirect(array('action', 'login'));
                }
            } else {
                $this->Session->setFlash('Password mismatch');
                $this->redirect(array('action', 'register'));
            }
        }
    }
}

Затем пользовательская модель:

var $validate = array (
    'username' => array (
        'alphaNumeric' => array(
            'rule' => 'alphaNumeric',
            'required' => true,
            'message' => 'Alphanumeric chars only'
        ),
        'between' => array(
            'rule' => array('between', 1, 24),
            'message' => 'Username between 1 and 24 chars'
        )
    ),
    'password' => array (
        'between' => array(
            'rule' => array('between', 7, 25),
            'message' => 'Password between 8 and 24 chars'
        )
    )
);

Файл register.ctp

<?php
echo $this->Form->create('User');
echo $this->Form->input('username');
echo $this->Form->input('password');
echo $this->Form->input('password_confirm', array('type' => 'password'));
echo $this->Form->end('Register account');
?>

Проверка пароля и password_confirm работает отлично, если я пишу разные пароли, я получаю ошибку, если пароли равны, я получаю ошибку длины пароля, где я не прав?

Журнал:

2011-03-29 23:20:41 Error: Array
(
    [User] => Array
    (
        [username] => tonino
        [password] => ae4f47749b697085b2f7322383fa7b14c79e06f6
        [password_confirm] => passwordtest
    )

)

Я забыл сказать, что мой пароль SHA1 hashed, так как я могу проверить, не ввел ли пользователь слишком длинный пароль?

0
vitto 30 Мар 2011 в 01:41
Что вы покажете, если сделаете $this->log($this->data) перед вызовом $this->User->save()
 – 
user470714
30 Мар 2011 в 02:35
Я написал журнал в вопросе. спасибо за совет, это полезно для отладки!
 – 
vitto
30 Мар 2011 в 03:23

1 ответ

Пароли автоматически хешируются компонентом AuthComponent. Вся проверка, которую вы выполняете, выполняется для пароля "ae4f47749b697085b2f7322383fa7b14c79e06f6", а не "passwordtest", поэтому проверка не проходит. Вам нужно выполнить проверку поля password_confirm, а не поля password.

См. здесь пример несколько прозрачного решения.

2
Community 23 Май 2017 в 15:11