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 class EventType
{ {
/** /**
* When user logs in application * When user registers to application
*/ */
public const REGISTER = 'REGISTER'; public const REGISTER = 'REGISTER';
/** /**
* When user logs in application * When user logs into application
*/ */
public const LOGIN = 'LOGIN'; 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'; public const LOGOUT = 'LOGOUT';
/** /**
* When user logs in application * When user resets password
*/ */
public const PASSWORD_RESET = 'PASSWORD_RESET'; 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 <?php
use App\Models\System\Verification; use App\Models\System\Verification;
use Exception;
use GuzzleHttp\Client; use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request as GuzzleRequest; use GuzzleHttp\Psr7\Request as GuzzleRequest;
use Illuminate\Http\Request; use Illuminate\Http\Request;

View File

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

View File

@@ -2,6 +2,7 @@
namespace App\Http\Controllers\Auth; namespace App\Http\Controllers\Auth;
use App\Events\EventType;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\System\Verification; use App\Models\System\Verification;
use App\Models\User; use App\Models\User;
@@ -97,6 +98,8 @@ class ResetPasswordController extends Controller
{ {
$user->update(['password' => bcrypt($request->password)]); $user->update(['password' => bcrypt($request->password)]);
storeAuthEvent(EventType::PASSWORD_RESET, request());
return response()->json([ return response()->json([
'step' => 3, 'step' => 3,
'message' => __('Your password has been updated'), '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 = [ protected $listen = [
'Illuminate\Auth\Events\Login' => ['App\Listeners\LoginListener'], 'Illuminate\Auth\Events\Login' => ['App\Listeners\LoginListener'],
'Illuminate\Auth\Events\Logout' => ['App\Listeners\LogoutListener'], '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'],
]; ];
/** /**

View File

@@ -27,7 +27,7 @@
<label class="block mb-2" for="username"> <label class="block mb-2" for="username">
{{ __('Username') }} {{ __('Username') }}
</label> </label>
<input class="form-control form-input form-input-bordered w-full @error('username') form-input-border-error @enderror" id="username" type="text" name="username" autofocus=""> <input class="form-control form-input form-input-bordered w-full @error('username') form-input-border-error @enderror" id="username" type="text" name="username" autofocus="" value="{{ old('username') }}">
@error('username') @error('username')
<span class="text-red-500 text-italic"> <span class="text-red-500 text-italic">