Лучший способ обработать форму с полем пароля в CakePHP 1.3? - PullRequest
1 голос
/ 02 августа 2011

У меня есть пользовательский контроллер и модель пользователя. Эта модель и связанная таблица базы данных используются для аутентификации, и, естественно, есть поле пароля.

В моем действии edit, когда я звоню $this->data, помещается хешированный пароль в поле моего пароля в моем представлении edit. Естественно, мне не нужно поле пароля с 40-символьным значением, которое затем будет повторно хешировано при сохранении.

Мое действие выглядит так:

function edit($id) {
    $this->User->id = $id;
    if (empty($this->data)) {
        $this->data = $this->User->read();
    }
    else {
        if ($this->User->save($this->data)) {
            $this->Session->setFlash('User has been updated.');
            $this->redirect(array('action' => 'view', $this->User->id));
        }
    }
}

И мой взгляд выглядит так:

<h2>Edit User</h2>
<?php
    echo $this->Form->create('User', array('action' => 'edit'));
    echo $this->Form->input('username');
    echo $this->Form->input('password');
    echo $this->Form->input('first_name');
    echo $this->Form->input('last_name');
    echo $this->Form->input('email');
    echo $this->Form->end('Save User');
?>

Как получить форму для редактирования своей учетной записи (имя пользователя и т. Д.), Которая не обновляет пароль, если оставить его пустым, но обновляет его, если пользователь вводит новый пароль в поле пароля?

Ответы [ 2 ]

2 голосов
/ 02 августа 2011

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

Если вы все еще хотите использовать первоначальный планВы можете сбросить переменную, если она пуста, перед сохранением данных:

if( $this->data[ 'User' ][ 'password' ] == '' ) {
    unset( $this->data[ 'User' ][ 'password' ] );
}

Другой вариант - перечислить разрешенные поля в качестве параметра в save() и пропустить password, если поле пустое.

В представлении вы можете использовать

echo $this->Form->input('password', array( 'value' => '' ) );

, чтобы не показывать хеш в поле.

0 голосов
/ 02 августа 2011

Большинство мест разрешают редактировать пароли только тогда, когда они вводят свои оригинальные пароли. Помогает защитить пароли от несанкционированного доступа.

Но если вы хотите это сделать, попробуйте

echo $this->Form->input('password', array('default'=>false));
...