@wilburn
В Laravel существует несколько способов зафиксировать событие входа (авторизации) пользователя. Рассмотрим несколько из них:
Laravel предоставляет стандартные события для отслеживания различных событий, включая событие входа пользователя. В файле app/Providers/EventServiceProvider.php
необходимо зарегистрировать обработчик события входа пользователя:
1 2 3 4 5 |
protected $listen = [ 'IlluminateAuthEventsLogin' => [ 'AppListenersLogSuccessfulLogin', ], ]; |
После этого необходимо создать обработчик события входа пользователя LogSuccessfulLogin
:
1 2 3 4 5 6 7 8 9 10 11 12 |
namespace AppListeners; use IlluminateAuthEventsLogin; use IlluminateSupportFacadesLog; class LogSuccessfulLogin { public function handle(Login $event) { Log::info('User logged in', ['email' => $event->user->email]); } } |
Обработчик будет вызываться при каждом успешном входе пользователя в систему, и записывать в лог информацию о входе пользователя, включая email пользователя.
Другой способ зафиксировать событие входа пользователя - использование middleware. Например, можно создать middleware LogUserLogin
, который будет записывать информацию о входе пользователя в лог:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
namespace AppHttpMiddleware; use Closure; use IlluminateSupportFacadesLog; class LogUserLogin { public function handle($request, Closure $next) { $response = $next($request); if (auth()->check()) { Log::info('User logged in', ['email' => auth()->user()->email]); } return $response; } } |
Затем необходимо зарегистрировать middleware в группе middleware:
1 2 3 4 5 6 |
protected $middlewareGroups = [ 'web' => [ // ... AppHttpMiddlewareLogUserLogin::class, ], ]; |
Middleware будет вызываться при каждом запросе, и при каждом успешном входе пользователя в систему, будет записывать информацию о входе пользователя в лог.
Третий способ зафиксировать событие входа пользователя - использование событий в модели User
. Например, можно добавить метод recordLogin
в модель User
, который будет вызываться при каждом успешном входе пользователя в систему:
1 2 3 4 5 6 7 8 9 |
class User extends Authenticatable { // ... public function recordLogin() { Log::info('User logged in', ['email' => $this->email]); } } |
Затем необходимо в контроллере, отвечающем за вход пользователя, вызвать метод recordLogin
после успешной авторизации пользователя:
1 2 3 4 5 6 7 8 9 10 11 12 |
public function login(Request $request) { // ... if (Auth::attempt($credentials)) { $request->session()->regenerate(); Auth::user()->recordLogin(); return redirect()->intended('/'); } // ... } |
Метод recordLogin