Espera un momento ...
¿Te gustaría llevar mi curso de Laravel, gratis?
Sólo debes ingresar tus datos:
En este tutorial aprenderás a registrar la fecha del último inicio de sesión de tus usuarios en Laravel.
En Laravel, el inicio de sesión, y registro, son funcionalidades que se pueden implementar fácilmente con tan solo usar un comando.
Estamos hablando específicamente del comando php artisan make:auth
.
Este comando va a generar por nosotros algunos archivos blade y controladores, necesarios para que funcione el login y registro de usuarios en nuestro proyecto.
Así que, una primera alternativa sería pensar en modificar el archivo LoginController
.
Si modificamos uno de sus métodos, específicamente uno que se encargue de crear la sesión del usuario luego de validar sus credenciales, podríamos capturar allí la fecha de inicio de sesión.
Sin embargo, hay una mejor forma de lograrlo.
Y es, usando los eventos de Laravel.
Así podemos evitar la complejidad de modificar LoginController
y seguir manteniendo nuestro código ordenado.
¿Cómo lo hacemos entonces?
Así es, lo primero que debemos hacer es detectar el momento en que un usuario acaba de iniciar sesión satisfactoriamente.
En ese instante vamos a guardar la fecha.
Entonces vamos a app\Providers\EventServiceProvider.php
.
Si es la primera vez que entras aquí te encontrarás con lo siguiente:
protected $listen = [
'App\Events\SomeEvent' => [
'App\Listeners\EventListener',
],
];
Este arreglo contiene un evento SomeEvent
de ejemplo, y un oyente EventListener
, también de ejemplo.
Lo que significa es que cuando ocurra SomeEvent
, el EventListener
asociado escuchará dicho evento y se encargará de actuar de cierta forma.
¿Eso significa que podemos crear nuestros propios eventos y nuestros propios listeners?
Es correcto.
Podemos definir nuestros propios eventos, y activarlos cuando lo creamos necesario.
Pero este no es el caso.
El evento de inicio de sesión no lo tenemos que activar nosotros. Es un evento que ya pone Laravel a nuestra disposición.
Para escuchar el evento de login y actuar ante él, usaremos lo siguiente:
protected $listen = [
'Illuminate\Auth\Events\Login' => [
'App\Listeners\SuccessfulLogin',
],
];
Como ves, el evento de Login ya viene predefinido. Pero nuestro Listener está en una carpeta de nuestro alcance.
Luego de haber modificado el EventServiceProvider
, lo siguiente es crear el listener SuccessfulLogin
.
Laravel nos facilita esta tarea. Pues simplemente debemos ejecutar:
php artisan event:generate
Si hiciste todo bien, de seguro que la consola te respondera: Events and listeners generated successfully!
Y dentro de la carpeta app\Listeners
encontrarás la clase SuccessfulLogin
.
Ábrela, y en su interior encontrarás un método handle
.
Llegados a este punto, puedes hacer con la fecha lo que mejor te parezca:
Si solo te interesa saber la última fecha en que un usuario inició sesión, basta con que añadas una columna más a tu tabla de usuarios.
Si lo que deseas, en cambio, es poder mostrar un historial con todas las fechas en que se inició sesión, entonces deberías crear una tabla adicional para ello.
Para este ejemplo, vamos a considerar la primera opción.
Entonces en la migración de users
tendremos lo siguiente:
$table->dateTime('last_login')->nullable();
Y en el método handle
:
public function handle(Login $event)
{
$event->user->last_login = new DateTime;
$event->user->save();
}
Es probable que te estés preguntando qué representa el objeto $event
.
Este objeto viene como parámetro en el método handle
, y esto es porque cuando Laravel activa el evento de Login, envía dicha información.
De la misma forma puede funcionar, si defines tus propios eventos.
Cuando actives los eventos, podrás enviar parámetros de esta forma, para que el listener actúe adecuadamente.
Para que lo comprendas mejor, puedes ver el siguiente video:
Si en tu aplicación la fecha y hora se están registrando con un valor que no coincide con la hora de tu país.
Lo más probable es que no hayas definido la zona horaria de tu proyecto Laravel.
Para hacer ello debes ir a config\app.php
.
Allí te encontrarás con:
'timezone' => 'UTC',
En mi caso, estoy en Perú, así que modificaré la zona horaria de esta forma:
'timezone' => 'America/Lima',
Y el resultado:
Laravel define muchos eventos que nos serán muy útiles en nuestro proyecto.
Y si queremos definir nuestros propios eventos, también podremos hacerlo.
Por ejemplo, si queremos enviar un mail de confirmación cuando un usuario realiza una publicación en nuestra app, podemos usar un evento que escuche este registro satisfactorio.
Si tienes alguna duda, o crees que podemos mejorar esta guía, por favor deja un comentario.
Gracias por leer hasta el final.
Comparte este post si te fue de ayuda 🙂.
Regístrate
Accede a todos los cursos, y resuelve todas tus dudas.
Cursos Recomendados
Aprende Laravel desde cero y desarrolla aplicaciones web reales, en tiempo récord, de la mano de Laravel.
Iniciar cursoActualiza tus proyectos desde cualquier versión hasta la última versión estable de Laravel.
Iniciar cursoDesarrollemos un Messenger! Aprende sobre Channels, Queues, Vuex, JWT, Sesiones, BootstrapVue y mucho más.
Iniciar cursoEspera un momento ...
¿Te gustaría llevar mi curso de Laravel, gratis?
Sólo debes ingresar tus datos: