Laravel: Guarda la fecha del 煤ltimo inicio de sesi贸n

Tiempo de lectura: 2.72 minutos

P贸ster del art铆culo Laravel: Guarda la fecha del 煤ltimo inicio de sesi贸n

En este tutorial aprender谩s a registrar la fecha del 煤ltimo inicio de sesi贸n de tus usuarios en Laravel.

Acerca del inicio de sesi贸n 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.

Eventos en Laravel

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?

Escuchar el evento de inicio de sesi贸n

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.

驴C贸mo creamos nuestro listener?

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.

脷ltimo paso: guardar la fecha

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

Preguntas frecuentes

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:

Hora incorrecta

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:

Tabla mostrando 煤ltimo login

Conclusi贸n

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.

# laravel

Logo de Programaci贸n y m谩s

Comparte este post si te fue de ayuda 馃槈.

Reg铆strate

Accede a todos los cursos, y mejora tus habilidades 馃殌.

Cursos Recomendados 馃殌

Imagen para el curso Aprende Laravel

Aprende Laravel

Aprende Laravel desde cero y desarrolla aplicaciones web reales, en tiempo r茅cord, de la mano de Laravel.

Iniciar curso
Imagen para el curso Laravel Upgrade

Laravel Upgrade

Actualiza tus proyectos desde cualquier versi贸n hasta la 煤ltima versi贸n estable de Laravel.

Iniciar curso
Imagen para el curso Laravel y Vue

Laravel y Vue

Desarrollemos un Messenger! Aprende sobre Channels, Queues, Vuex, JWT, Sesiones, BootstrapVue y mucho m谩s.

Iniciar curso

Art铆culos Relacionados 馃摎

Espera un momento 馃巵 ...

驴Te gustar铆a aprender a programar, gratis?

Mago de Programaci贸n y m谩s

S贸lo debes registrarte 馃槈.