Notificar Bloqueo por Intentos Fallidos de Login en Laravel

Spread the love

Laravel tiene la capacidad de bloquear usuarios que intentan iniciar sesión muchas veces y fallan.

Cuando el bloqueo ocurre Laravel dispara el evento Illuminte\Auth\Events\Lockout. a este evento le puedes asociar un listener para que maneje la lógica que quieras.

Así que puedes aprovechar este evento y notificar al usuario que algo inusual esta pasando con su cuenta. Sin tener que modificar el código de la autentificación.

Maneja el evento Lockout

Para notificar al usuario necesitas crear un listener que escuche el eventos Lockout y esto lo puedes hacer sin problema ejecutando el comando artisan:

php artisan make:listener AccountLockoutListener

El siguiente paso es que enlaces el listener al evento en el proveedor de servicios de eventos.

    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
        ],
        Lockout::class => [
            AccountLockoutListener::class,
        ]
    ];

Notificar al usuario

Para notificar al usuario solo requieres manejar el evento en la clase AccountLockoutListener,

<?php

namespace App\Providers;

class AccountLockoutListener
{
    //...

    public function handle(Lockout $event)
    {
        if ($user = User::firstWhere('email', $event->request->email)) {
            $user->notify(new ManyLoginAttempts());
        }
    }
}

Observa que el evento Lockuot lleva el request y con esto puedes buscar el usuario por el E-mail y enviarle la notificación.

Para finalizar solo resta que crees la notificación y la personalices con el mensaje que quieres enviar y eso seria todo y a partir de ahora cuando un usuario sea bloqueado recibirá la notificación.

Si tienes alguna duda deja aquí mismo un mensaje.