2012-03-10 11 views
5

Sto solo lavorando al componente di gestione utenti del nostro nuovo progetto. Il piano è: registraCakePHP 2.0 Login automatico dopo l'attivazione dell'account

  1. utente sulla pagina con quantità minima di dati dell'account (nome utente, passare, e-mail)
  2. utente riceve un'e-mail con un link di attivazione per attivare l'account clicca
  3. utente su il link e attiva il suo account
  4. I registri di sistema del manuale dopo automaticamente dopo l'attivazione e lo reindirizza a una specie di cruscotto con informazioni sul conto (ultimo accesso, hi "username", etc.)

Ma ci sono alcuni problemi con il login automatico. questa è la parte del codice che uso:

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

Questo funziona fino ad ora, fino a quando si desidera ottenere informazioni sulla utente connesso con la funzione utente() del componente Auth.

Stiamo utilizzando questo AppController-> BeforeRender, per avere applicazione le informazioni dell'utente un'ampia:

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

ma dopo che l'azione login automatico, sto diventando Avvertenze Indice indefiniti. (ad esempio accedendo a $ auth ['id'] in una vista). print_r() mi mostra solo il nome utente e la password con hash dell'utente corrente. Se accedi manualmente, tutto funziona correttamente. deve essere qualcosa con il login automatico dopo l'attivazione dell'account.

Sembra essere un problema con la sessione? Che cosa sto facendo di sbagliato?

risposta

11

Trovato una soluzione dopo aver provato molte varianti.

ora funziona con:

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

Non so perché, ho pensato che ho provato in questo modo già e che non ha funzionato.

+2

È possibile utilizzare semplicemente: $ this-> Auth-> login ($ utente ['Utente']); –

1

Hai provato questo? (CakePHP 2.x)

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

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

Che semplice!

Problemi correlati