Почему поле пароля CakePHP пусто при попытке доступа к нему с помощью $ this-> data? - PullRequest
6 голосов
/ 07 июня 2009

Я реализую компонент аутентификации, Это моя страница регистрации


create('User',array('action' => 'login'));
    echo $form->input('primary_email',array('size'=> 32));
    echo $form->input('password',array('label' => 'Password'));
    echo $form->input('remember_me',array('label' => 'Remember Me','type'=>'checkbox','checked' => 'false'));
    echo $html->link('Forgot Password','/users/forgot/');
    echo $form->end('Login'); 

    // Javascripts
    echo $javascript->link('jquery',false);
    //echo $javascript->link('jquery.validate.js',false);
    //echo $javascript->codeBlock($code, array('inline' => false)); 

?>

Когда я печатаю содержимое $ this-> data, поле пароля становится пустым. Как я могу решить эту проблему?

Когда я переименовываю пароль в password2 или что-то еще, это работает !!! Странно

Ответы [ 8 ]

2 голосов
/ 07 июня 2009

это потому, что компонент Auth удаляет пароль из массива данных (в целях безопасности). почему вы хотите, чтобы он в любом случае содержал пароль? логика "помни меня" (которую, как я полагаю, ты используешь в полях формы) будет обрабатывать вход пользователя без пароля.

2 голосов
/ 22 июня 2011

У меня была такая же проблема, и предложение мрланрата мне помогло.

Вместо того, чтобы пытаться получить доступ к $ this-> data ['password'], вам необходимо получить доступ к $ this-> Auth-> data ['password']

Что в основном происходит, так это то, что компонент Auth хэширует пароль и перемещает хешированную версию в данные $ this-> Auth->. Не хэшированная версия удаляется в целях безопасности.

Поэтому, когда вам нужно иметь дело с данными, связанными с компонентом Auth, убедитесь, что вы используете $ this-> Auth-> data, а не $ this-> data.

1 голос
/ 05 августа 2010

Одна вещь, которую вы можете сделать, это заставить пользователя подтвердить свой пароль и использовать его для функции входа в систему. Возможно, я полностью неверно читаю то, что вы пытаетесь выполнить, но если у вас есть пользователь Подтвердите свой пароль с полем пароль 2, вы можете сравнить их, а также использовать начальное состояние пароля подтверждения для любых целей. это то, что ты хочешь сделать. Итак:

echo $form->input('password', array('label' => 'password'));
echo $form->input('password2', array('label' => 'Confirm Password'));

Внутри вашей логики для всего, что вы хотите достичь, вы можете просто поместить:

$morePermanentDataStorage = $this->data['User']['password2'];
if($this->data['User']['password'] == $this->Auth->password($this->data['User']['password2']) {
//function logic here
}

Я также предполагаю, что ваша логика формы сверху фактически начинается с:

echo $form->create('User');
1 голос
/ 08 декабря 2009

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

$this->data['password']=$this->Auth->password($this->data['User']['pwd']);
//now you can call $this->Auth->login and it will work
0 голосов
/ 06 апреля 2012

Прежде всего необходимо прокомментировать код Configure::write('Cache.disable', true); в файле core.php

0 голосов
/ 23 декабря 2010

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

$this->Auth->fields = array('username' => 'email', 'password' => 'password');

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

0 голосов
/ 30 июля 2010

У меня была та же проблема, с помощью $ this-> Auth-> data ['User'] ['user'] и $ this-> Auth-> data ['User'] ['password'] ее исправили.

Похоже, что контроллер аутентификации удалил пароль из данных, когда он делает его автоматическим.

0 голосов
/ 17 июня 2009

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

Странный обходной путь - перейти на /config/core.php и временно изменить уровень отладки, например, измените с Configure::write('debug', 0); на Configure::write('debug', 1); и затем запустите ваш код - не обязательно часть с компонентом Auth - (а затем измените уровень отладки обратно, если хотите). $this->data['User']['password'] теперь будет заполняться значением хеша, как и предполагалось.

Что вызывает это в первую очередь все еще бьет меня:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...