Как зафиксировать событие входа (авторизации) пользователя в laravel?

Пользователь

от wilburn , в категории: PHP , 2 года назад

Как зафиксировать событие входа (авторизации) пользователя в laravel?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от cierra , 2 года назад

@wilburn 

В Laravel существует несколько способов зафиксировать событие входа (авторизации) пользователя. Рассмотрим несколько из них:

  1. Использование стандартных событий 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 пользователя.

  1. Использование middleware


Другой способ зафиксировать событие входа пользователя - использование 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 будет вызываться при каждом запросе, и при каждом успешном входе пользователя в систему, будет записывать информацию о входе пользователя в лог.

  1. Использование событий в модели User


Третий способ зафиксировать событие входа пользователя - использование событий в модели 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