Компонент CakePHP Auth не отражает изменения в пользовательских данных - PullRequest
2 голосов
/ 24 июня 2011

Когда я пытаюсь добиться следующего:

  1. Пользователь меняет электронную почту
  2. Пользователь получает письмо с подтверждением
  3. Пользователь активирует измененную электронную почту.

То, как я это делаю, таково:

<?php
echo $form->create('User', array('action' => 'changeEmail'));
echo $form->input('email');
echo $form->end('Change');
?>

Тогда мой контроллер

function changeEmail(){
 if(!empty($this->data)){
  $user = $this->Auth->user();
  $user['User']['email'] = $this->data['User']['email'];
  $activationcode = _generateActivationCode();
  $user['User']['activationcode'] = $activationcode;
  $user['User']['isactive'] = false;

  if($this->User->save($user)){
    //sendmail
  }
 }

Затем я получаю представление, где они могут активировать электронную почту, и я делаюследующее:

function activate(){
 $user = $this->Auth->user();

 //Now this variable doesn't reflect the changes we've just saved (for example the activationCode)
}

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

1 Ответ

6 голосов
/ 24 июня 2011

AuthComponent кэширует пользовательские данные в сеансе.Эти данные не обновляются, пока пользователь снова не войдет в систему.Вы можете перезаписать данные в сеансе явным образом:

$this->Session->write('Auth.User', $user);

Или повторно аутентифицировать пользователя, что должно вызвать обновление (не уверен на 100%, если это действительно работает):

$this->Auth->login($this->Auth->user('id'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...