2012-03-10 2 views
5

Я просто работаю над компонентом управления пользователями нашего нового проекта. План: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')); 
... 

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

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

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

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

Кажется, проблема с сеансом? Что я делаю не так?

ответ

11

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

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

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

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

+2

Вы можете использовать: $ this-> Auth-> login ($ user ['User']); –

1

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

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

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

Это просто!

Смежные вопросы