add lockout, failed and attemting events

This commit is contained in:
2024-01-31 00:04:55 +05:00
parent 33d3980a6b
commit bf483a206c
7 changed files with 85 additions and 6 deletions

View File

@@ -5,22 +5,67 @@ namespace App\Events;
class EventType
{
/**
* When user logs in application
* When user registers to application
*/
public const REGISTER = 'REGISTER';
/**
* When user logs in application
* When user logs into application
*/
public const LOGIN = 'LOGIN';
/**
* When user logs in application
* When user verifies phone number
*/
public const PHONE_VERIFICATION = 'PHONE_VERIFICATION';
/**
* When user logs out of application
*/
public const LOGOUT = 'LOGOUT';
/**
* When user logs in application
* When user resets password
*/
public const PASSWORD_RESET = 'PASSWORD_RESET';
/**
* When user resets password
*/
public const FAILED = 'FAILED';
/**
* When user resets password
*/
public const ATTEMPTING = 'ATTEMPTING';
/**
* When user resets password
*/
public const LOCKOUT = 'LOCKOUT';
/**
* Laravel's default events
*/
public static function laravelDefaultEvents(): array
{
return [
'Illuminate\\Auth\\Events\\Attempting' => self::ATTEMPTING,
'Illuminate\\Auth\\Events\\Failed' => self::FAILED,
'Illuminate\Auth\Events\Lockout' => self::LOCKOUT,
];
}
/**
* Guest the event
* @param object $event
*/
public static function guessEvent(string|object $event): string
{
if (is_object($event)) {
$event = get_class($event);
}
return self::laravelDefaultEvents()[$event] ?? '';
}
}

View File

@@ -1,7 +1,6 @@
<?php
use App\Models\System\Verification;
use Exception;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request as GuzzleRequest;
use Illuminate\Http\Request;

View File

@@ -2,6 +2,7 @@
namespace App\Http\Controllers\Auth;
use App\Events\EventType;
use App\Http\Controllers\Controller;
use App\Models\System\Verification;
use App\Models\User;
@@ -48,6 +49,8 @@ class RegisterController extends Controller
Auth::guard()->login($user);
storeAuthEvent(EventType::REGISTER, $request);
sendSMSVerification($user->phone);
return to_route('sms-verification');
@@ -109,6 +112,8 @@ class RegisterController extends Controller
'phone_verified_at' => now(),
]);
storeAuthEvent(EventType::PHONE_VERIFICATION, $request);
return redirect(Nova::path());
}
}

View File

@@ -2,6 +2,7 @@
namespace App\Http\Controllers\Auth;
use App\Events\EventType;
use App\Http\Controllers\Controller;
use App\Models\System\Verification;
use App\Models\User;
@@ -97,6 +98,8 @@ class ResetPasswordController extends Controller
{
$user->update(['password' => bcrypt($request->password)]);
storeAuthEvent(EventType::PASSWORD_RESET, request());
return response()->json([
'step' => 3,
'message' => __('Your password has been updated'),

View File

@@ -0,0 +1,24 @@
<?php
namespace App\Listeners;
use App\Events\EventType;
class AuthFailedListener
{
/**
* Create the event listener.
*/
public function __construct()
{
//
}
/**
* Handle the event.
*/
public function handle(object $event): void
{
storeAuthEvent(EventType::guessEvent($event), request());
}
}

View File

@@ -15,6 +15,9 @@ class EventServiceProvider extends ServiceProvider
protected $listen = [
'Illuminate\Auth\Events\Login' => ['App\Listeners\LoginListener'],
'Illuminate\Auth\Events\Logout' => ['App\Listeners\LogoutListener'],
'Illuminate\Auth\Events\Attempting' => ['App\Listeners\AuthFailedListener'],
'Illuminate\Auth\Events\Failed' => ['App\Listeners\AuthFailedListener'],
'Illuminate\Auth\Events\Lockout' => ['App\Listeners\AuthFailedListener'],
];
/**