Проверка CakePHP, сообщения об ошибках в Auth и отключение изменены. - PullRequest
0 голосов
/ 30 июля 2011

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

    function login() {
            $this->layout = 'login';
            $this->set('title_for_layout', 'Login');
            if (!empty($this->data) && $id = $this->Auth->user('id')) { 
                    $this->User->id = $id; 
                    $this->User->saveField('last_login', date('Y-m-d H:i:s')); 
                    $this->Session->setFlash(__('You have successfully logged in', true));
                    $this->redirect(array('action'=>'index')); 
            }    
    }

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

var $validate = array(
                'username' => array(
               ),
                'login' => array(
                            'rule' => 'isUnique',
                            'message' => 'This username has already been taken',
                     ),
                    'pattern' => array(
                            'rule' => array('custom','/[a-zA-Z0-9\_\-]{6,}$/i'),
                            'message' => 'Must be 6 characters or longer with no spaces',
                    ),
                    'length' => array(
                            'rule' => array('maxLength', 15),
                            'message' => 'Please keep username under 15 characters',
                    ),
                    'notempty' => array(
                            'rule' => array('notempty'),
                            'message' => 'Username cannot be empty',
                    ),
            ),
        'password' => array(
                        'notempty' => array(
                                'rule' => array('notempty'),
                                'message' => 'Password cannot be empty',
                        ),
                        'length' => array(
                                'rule' => array('between', 5, 15),
                                'message' => 'Passwords must be between 5 and 15 characters long with no spaces',
                                'on' => 'create',
                        )
        )
);

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

Действительно, у меня три вопроса ...

  1. Почему моя проверка не работает правильно?

  2. Как я могу отображать сообщения из AuthComponent в моих представлениях?

  3. Как временно отключить обновление поля modified в моей таблице?

Большое спасибо!

1 Ответ

1 голос
/ 30 июля 2011

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

Вот что у вас есть:

'login' => array(
                'rule' => 'isUnique',
                'message' => 'This username has already been taken',
            ),
                        'pattern' => array(
                                'rule' => array('custom','/[a-zA-Z0-9\_\-]{6,}$/i'),
                                'message' => 'Must be 6 characters or longer with no spaces',
                        ),
                        'length' => array(
                                'rule' => array('maxLength', 15),
                                'message' => 'Please keep username under 15 characters',
                        ),
                        'notempty' => array(
                                'rule' => array('notempty'),
                                'message' => 'Username cannot be empty',
                        ),
        ),

Вот что я думаю вы хотите иметь

'username' => array(
    'isUnique' => array(
        'rule' => 'isUnique',
        'message' => 'This username has already been taken'
    ),
    'pattern' => array(
        'rule' => array('custom','/[a-zA-Z0-9\_\-]{6,}$/i'),
        'message' => 'Must be 6 characters or longer with no spaces',
    ),
    'length' => array(
        'rule' => array('maxLength', 15),
        'message' => 'Please keep username under 15 characters',
    ),
    'notEmpty' => array(
        'rule' => 'notEmpty',
        'message' => 'Username cannot be empty',
    ),
),

Обязательные ссылки на CakePHP Book и CakePHP API .

<ч /> Ответ на ошибку от ОП в комментарии:

Теперь я понимаю, что вы пытались сделать. Попробуйте это:

$id = $this->Auth->user('id');
if (!empty($this->data) && $id) { 
                $this->User->id = $id;

<ч /> Ответ на вопрос «Как отобразить мое сообщение об ошибке входа в систему от AuthComponent

Чтобы появилось сообщение об ошибке входа в систему, вам необходимо добавить следующую строку в свой макет или просмотреть форму входа в систему.

echo $this->Session->flash('auth');

<ч /> Ответ на вопрос «Как временно отключить поведение CakePHP modified?»:

Итак, кратко рассмотрев исходный код и ответ на этот вопрос во внутреннем QA теста Cake, вы можете добавить что-то подобное перед сохранением данных.

$this->data['User']['modified'] = false;

Это говорит Cake не обновлять измененное поле.

Интересно, что из исходного кода можно легко заменить false на true, и это поле не будет обновлено. Я не знаю, так ли это на самом деле.

...