CakePHP 2.0 Автоматический вход в систему после активации учетной записи

Я просто работаю над компонентом управления пользователями нашего нового проекта. План таков:

  1. Пользователь регистрируется на странице с минимальным количеством данных учетной записи (логин, пароль, адрес электронной почты)
  2. Пользователь получает электронное письмо со ссылкой для активации учетной записи.
  3. Пользователь переходит по ссылке и активирует свою учетную запись
  4. Система автоматически регистрирует пользователя после активации и перенаправляет его на своего рода панель управления с информацией об учетной записи (последний вход, привет «имя пользователя» и т. д.)

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

<?php
...
// set userstatus to "active" and delete meta information "activation_key"
// then automatically login
$this->User->id = $id;
$this->User->saveField('modified', date('Y-m-d H:i:s') );
$this->User->saveField('status', 1 );

// $this->User->deleteActivationKey ....

$this->Auth->login($this->User->read());
$this->Session->setFlash(__('Successfully activated account. You are now logged in.'));

$this->User->saveField('last_login', date('Y-m-d H:i:s') );

$this->redirect(array('controller' => 'pages'));
...

Это работает до тех пор, пока вы не захотите получить информацию о вошедшем в систему пользователе с помощью функции user() компонента Auth.

Мы используем это в AppController->beforeRender, чтобы иметь широкое приложение информации о пользователе:

$this->set('auth', $this->Auth->user());

но после этого автоматического входа в систему я получаю уведомления о неопределенном индексе. (например, обратившись к $auth['id'] в представлении). print_r() показывает мне только имя пользователя и хешированный пароль текущего пользователя. При ручном входе все работает нормально. это должно быть что-то с автоматическим входом в систему после активации учетной записи.

Кажется, проблема с сессией? Что я делаю неправильно?


person nahri    schedule 10.03.2012    source источник


Ответы (2)


Нашел решение после тестирования многих вариантов.

Теперь работает с:

$user = $this->User->findById($id);
$user = $user['User'];
$this->Auth->login($user);

Не знаю почему, я думал, что уже пробовал этот способ, и это не сработало.

person nahri    schedule 11.03.2012
comment
Вы можете просто использовать: $this-›Auth-›login($user['User']); - person b. e. hollenbeck; 14.04.2012

Вы пробовали это? (Торт PHP 2.x)

public function signup() {   
  if (!empty($this->request->data)) {
    // Registration stuff

    // Auto login
    if ($this->Auth->login()) {
      $this->redirect('/');
    }
  }
}

Так просто!

person vinzcelavi    schedule 24.01.2014