2012-03-10 12 views
5

Estoy trabajando en el componente de gestión del usuario de nuestro nuevo proyecto. El plan es:CakePHP 2.0 Inicio de sesión automático después de la activación de la cuenta

  1. usuario se registra en la página con la cantidad mínima de datos de la cuenta (nombre de usuario, transmitir, correo electrónico)
  2. usuario recibe un correo electrónico con un enlace de activación para activar la cuenta hace clic en
  3. usuario el enlace y activa su cuenta
  4. los registros del sistema en forma automática después de que el usuario después de la activación y le redirige a una especie de tablero de instrumentos con información de la cuenta (última entrada, hola "nombre de usuario", etc.)

Pero hay algunos problemas con el inicio de sesión automático. esta es la parte del código que utilizo:

<?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')); 
... 

Esto funciona hasta el momento, hasta que desee obtener información sobre el usuario conectado con la función de usuario() del componente de autenticación.

Estamos usando esto en AppController-> BeforeRender, que tienen aplicación amplia información de los usuarios:

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

pero después de que la acción de inicio de sesión automático, estoy recibiendo avisos de índice no definidos. (por ejemplo, accediendo a $ auth ['id'] en una vista). print_r() me muestra solo el nombre de usuario y la contraseña hash del usuario actual. Si inicia sesión manualmente, todo funciona bien. debe ser algo con el inicio de sesión automático después de la activación de la cuenta.

Parece ser un problema con la sesión? ¿Qué estoy haciendo mal?

Respuesta

11

Encontré una solución después de probar muchas variaciones.

funciona ahora con:

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

No sé por qué, pensé que probé esta manera ya y que no funcionó.

+2

Puede simplemente usar: $ this-> Auth-> login ($ user ['User']); –

1

¿Has probado esto? (CakePHP 2.x)

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

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

¡Eso simple!

Cuestiones relacionadas