Pregunta

Soy bastante nuevo en Codeigniter y estoy usando Ion Auth para la autorización del usuario. Con la biblioteca de autores de iones, obtienes un objeto de usuario como:

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

Si un usuario inicia sesión, quiero que el objeto $ usuario esté disponible en cualquiera de las páginas (en cualquiera de los controladores). ¿Cómo puedo hacer esto? (Estoy usando CodeInigniter 2)

¿Fue útil?

Solución

Esta publicación de blog mía Entra en muchos detalles al usar específicamente ION_Auth para permitir que toda su aplicación (incluidas las vistas) accedan a la información actual de su usuario.

La versión corta ... (específicamente para el tema en cuestión)

Agregando esto a su MY_Controller.php expediente

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('/');
        }
    }
}

Luego, en su aplicación, simplemente cree su controlador como este

class App_Controller extends User_Controller {

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

    function index() {
        //do stuff
    }
}

Entonces no solo en su controlador tendrá acceso a $this->the_user Pero también tendrás $the_user cargado en cada vista con $this->load->vars()

Otros consejos

Normalmente caché algo como esto en la sesión, sin embargo, me he alejado de eso en la mayoría de mis aplicaciones CI.

Un ejemplo: registra al usuario (almacenando en caché los datos del usuario) y luego van a actualizar su correo electrónico en su página de perfil. Ahora tienes que recargar tu caché. Muchas otras cosas podrían impulsar esta recarga. Por lo general, la mayoría de los caché es la identificación, luego hago lo que está haciendo y obtengo los datos del usuario en cualquier página que lo necesite.

Una cosa que encontré que ayuda es tener controladores base. Por ejemplo, tengo un controlador registrado. Cualquier controlador cuyas acciones requieren que se registre al usuario extiende esto. De esa manera, puedo mantener el cheque registrado y cosas como obtener los datos del usuario en un solo lugar (en el constructor). Por ejemplo:

class RegisteredUserController extends CI_Controller {
    var $user;

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

Entonces cualquier controlador que se extienda RegisteredUserController En lugar de solo el controlador, puede llegar al usuario con $this->user. Seguir este patrón lo conseguiría en cada página (que extiende el controlador) sin recurrir al almacenamiento en caché.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top