add lockout, failed and attemting events
This commit is contained in:
@@ -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] ?? '';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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'),
|
||||||
|
|||||||
24
app/Listeners/AuthFailedListener.php
Normal file
24
app/Listeners/AuthFailedListener.php
Normal 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());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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'],
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
Reference in New Issue
Block a user