Domanda

Sono abbastanza nuovo per CodeIgniter e sto usando Ion Auth per l'autorizzazione dell'utente. Con la libreria Ion Auth, si ottiene un oggetto utente, come:

  $user = $this->ion_auth->get_user();
  echo $user->email;

Se un utente è connesso, voglio l'oggetto utente $ per essere disponibile su qualsiasi delle pagine (in nessuno dei controllori). Come posso fare questo? (Sto usando CodeIgniter 2)

È stato utile?

Soluzione

Questo post del blog del mio va in un sacco di dettagli in modo specifico utilizzando Ion_Auth per consentire l'intera applicazione (incluse le viste) per accedere alle informazioni tuo attuale dell'utente.

La versione breve ... (in particolare per l'argomento a portata di mano)

L'aggiunta di questo al vostro file MY_Controller.php

class User_Controller extends CI_Controller {

    protected $the_user;

    public function __construct() {

        parent::__construct();

        if($this->ion_auth->logged_in()) {
            $data->the_user = $this->ion_auth->get_user();
            $this->the_user = $data->the_user;
            $this->load->vars($data);
        }
        else {
            redirect('/');
        }
    }
}

Poi nell'applicazione basta creare il controller come questo

class App_Controller extends User_Controller {

    public function __construct() {
        parent::__construct();
    }

    function index() {
        //do stuff
    }
}

Quindi, non solo nel controller si avrà accesso a $this->the_user, ma si avrà anche $the_user caricato in ogni vista con $this->load->vars()

Altri suggerimenti

Normalmente ci si memorizza nella cache qualcosa di simile nella sessione, ma ho spostato lontano da che nella maggior parte delle mie applicazioni CI.

Un esempio: si accede l'utente nella (caching dei dati utente) e poi vanno ad aggiornare la loro e-mail sulla loro pagina di profilo. Ora avete voi per ricaricare la cache. Molte altre cose potrebbero guidare questo reload. Di solito il più io di cache più è l'ID, poi faccio quello che stai facendo e ottenere i dati dell'utente in qualsiasi pagina, ne ho bisogno.

Una cosa che ho trovato che aiuta è quello di avere controller di base . Per esempio ho un RegisteredUserController. Qualsiasi controller cui azioni tutto richiedono all'utente di essere registrato in estendere questo. In questo modo posso mantenere il login controllo e le cose come ottenere i dati degli utenti in un punto (nel costruttore). Ad esempio:

class RegisteredUserController extends CI_Controller {
    var $user;

    function  __construct()  {
        parent::__construct();
            $this->user = $this->ion_auth->get_user();
        }
}

Quindi qualsiasi controller che si estende RegisteredUserController invece di controller può raggiungere l'utente con $this->user. Seguendo questo schema sarebbe scarica su ogni pagina (che si estende il controller) senza ricorrere alla cache.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top