Unetway

Laravel - Authentication

Вступление

Хотите начать быстро? Просто запустите и в свежем приложении Laravel. Затем перейдите в браузере или по любому другому URL-адресу, назначенному вашему приложению. Эти две команды позаботятся о создании всей вашей системы аутентификации!php artisan make:authphp artisan migratehttp://your-app.test/register

Laravel делает реализацию аутентификации очень простой. На самом деле, почти все настроено для вас из коробки. Файл конфигурации аутентификации находится по адресу , который содержит несколько хорошо документированных опций для настройки поведения сервисов аутентификации.config/auth.php

По своей сути средства аутентификации Laravel состоят из «охранников» и «провайдеров». Охрана определяет, как пользователи проходят аутентификацию для каждого запроса. Например, Laravel поставляется с sessionзащитой, которая поддерживает состояние, используя хранилище сеансов и куки.

Поставщики определяют способ извлечения пользователей из вашего постоянного хранилища. Laravel поставляется с поддержкой поиска пользователей с помощью Eloquent и построителя запросов к базе данных. Тем не менее, вы можете определить дополнительных поставщиков, необходимых для вашего приложения.

Не волнуйтесь, если все это звучит странно! Многим приложениям никогда не потребуется изменять конфигурацию аутентификации по умолчанию.

 

База данных

По умолчанию Laravel включает модель Eloquent в ваш каталог. Эта модель может использоваться с драйвером аутентификации Eloquent по умолчанию. Если ваше приложение не использует Eloquent, вы можете использовать драйвер аутентификации, который использует построитель запросов Laravel.App\User appdatabase

При построении схемы базы данных для модели убедитесь, что длина столбца пароля не менее 60 символов. Поддержание длины столбца строки по умолчанию 255 символов было бы хорошим выбором.App\User

Кроме того, вы должны убедиться, что ваша users(или эквивалентная) таблица содержит строковый remember_tokenстолбец, который может содержать нуль . Этот столбец будет использоваться для хранения токена для пользователей, которые выбирают опцию «запомнить меня» при входе в приложение.

 

Быстрый старт аутентификации

Laravel поставляется с несколькими встроенными контроллерами аутентификации, которые расположены в пространстве имен. Он обрабатывает регистрацию нового пользователя, обрабатывает аутентификацию, обрабатывает ссылки электронной почты для сброса паролей и содержит логику для сброса паролей. Каждый из этих контроллеров использует черту для включения своих необходимых методов. Для многих приложений вам вообще не нужно изменять эти контроллеры.App\Http\Controllers\AuthRegisterControllerLoginControllerForgotPasswordControllerResetPasswordController

 

Маршрутизация

Laravel предоставляет быстрый способ создать все маршруты и представления, необходимые для аутентификации, с помощью одной простой команды:

php artisan make:auth

Эта команда должна использоваться в свежих приложениях и будет устанавливать представление макета, представления регистрации и входа в систему, а также маршруты для всех конечных точек аутентификации. HomeControllerБудет также сгенерировано A для обработки запросов после входа на панель управления вашего приложения.

Если ваше приложение не требует регистрации, вы можете отключить его, удалив вновь созданные RegisterControllerи модифицируя декларацию маршрута: .Auth::routes(['register' => false]);

 

Просмотры

Как упоминалось в предыдущем разделе, команда создаст все представления, необходимые для аутентификации, и поместит их в каталог.php artisan make:authresources/views/auth

Команда также создаст каталог, содержащий базовый макет для вашего приложения. Все эти представления используют CSS-среду Bootstrap, но вы можете настроить их по своему усмотрению.make:authresources/views/layouts

 

Проверка подлинности

Теперь, когда у вас есть настройки маршрутов и представлений для включенных контроллеров аутентификации, вы готовы регистрировать и аутентифицировать новых пользователей для вашего приложения! Вы можете получить доступ к своему приложению в браузере, поскольку контроллеры аутентификации уже содержат логику (по своим признакам) для аутентификации существующих пользователей и сохранения новых пользователей в базе данных.

Настройка пути

Когда пользователь успешно аутентифицирован, он будет перенаправлен на /homeURI. Вы можете настроить расположение перенаправления после аутентификации путем определения redirectToсобственности на LoginControllerRegisterControllerResetPasswordControllerи VerificationController:

protected $redirectTo = '/';

Затем вы должны изменить метод RedirectIfAuthenticatedпромежуточного программного обеспечения handleдля использования вашего нового URI при перенаправлении пользователя.

Если путь перенаправления требует специальной логики генерации, вы можете определить redirectToметод вместо redirectToсвойства:

protected function redirectTo()
{
    return '/path';
}

redirectToМетод будет иметь приоритет над redirectToатрибутом.

Настройка имени пользователя

По умолчанию Laravel использует emailполе для аутентификации. Если вы хотите настроить это, вы можете определить usernameметод на вашем LoginController:

public function username()
{
    return 'username';
}

Настройка охраны

Вы также можете настроить «охрану», которая используется для аутентификации и регистрации пользователей. Для начала, определите guardметод вашего LoginControllerRegisterControllerи ResetPasswordController. Метод должен вернуть экземпляр защиты:

use Illuminate\Support\Facades\Auth;

protected function guard()
{
    return Auth::guard('guard-name');
}

Проверка / настройка хранилища

Чтобы изменить поля формы, которые требуются при регистрации нового пользователя в вашем приложении, или настроить способ хранения новых пользователей в вашей базе данных, вы можете изменить RegisterControllerкласс. Этот класс отвечает за проверку и создание новых пользователей вашего приложения.

validatorМетод из RegisterControllerсодержит правила проверки для новых пользователей приложения. Вы можете изменить этот метод по своему желанию.

createМетод из RegisterControllerотвечает за создание новых записей в базе данных , используя Красноречивый ОРМ . Вы можете изменить этот метод в соответствии с потребностями вашей базы данных.App\User

 

Получение аутентифицированного пользователя

Вы можете получить доступ к аутентифицированному пользователю через Authфасад:

use Illuminate\Support\Facades\Auth;

// Get the currently authenticated user...
$user = Auth::user();

// Get the currently authenticated user's ID...
$id = Auth::id();

В качестве альтернативы, после аутентификации пользователя вы можете получить доступ к аутентифицированному пользователю через экземпляр. Помните, классы с подсказками типов будут автоматически внедряться в ваши методы контроллера:Illuminate\Http\Request

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ProfileController extends Controller
{
    /**
     * Update the user's profile.
     *
     * @param  Request  $request
     * @return Response
     */
    public function update(Request $request)
    {
        // $request->user() returns an instance of the authenticated user...
    }
}

Определение того, аутентифицирован ли текущий пользователь

Чтобы определить, вошел ли пользователь в ваше приложение, вы можете использовать checkметод на Authфасаде, который будет возвращаться, trueесли пользователь аутентифицирован:

use Illuminate\Support\Facades\Auth;

if (Auth::check()) {
    // The user is logged in...
}

Даже если можно определить, прошел ли пользователь проверку подлинности с использованием этого checkметода, вы, как правило, будете использовать промежуточное программное обеспечение для проверки подлинности пользователя перед тем, как разрешить пользователю доступ к определенным маршрутам / контроллерам. Чтобы узнать больше об этом, ознакомьтесь с документацией по защите маршрутов .

 

Защита маршрутов

Промежуточное программное обеспечение маршрута может использоваться, чтобы позволить только аутентифицированным пользователям получать доступ к данному маршруту. Laravel поставляется с authпромежуточным программным обеспечением, которое определено как . Поскольку это промежуточное ПО уже зарегистрировано в вашем ядре HTTP, все, что вам нужно сделать, это подключить промежуточное ПО к определению маршрута:Illuminate\Auth\Middleware\Authenticate

Route::get('profile', function () {
    // Only authenticated users may enter...
})->middleware('auth');

Если вы используете контроллеры , вы можете вызывать middlewareметод из конструктора контроллера, а не присоединять его непосредственно в определении маршрута:

public function __construct()
{
    $this->middleware('auth');
}

Перенаправление неаутентифицированных пользователей

Когда authпромежуточное ПО обнаруживает неавторизованного пользователя, оно перенаправляет пользователя на login указанный маршрут . Вы можете изменить это поведение, обновив redirectToфункцию в вашем файле:app/Http/Middleware/Authenticate.php

/**
 * Get the path the user should be redirected to.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return string
 */
protected function redirectTo($request)
{
    return route('login');
}

Указание гвардии

При подключении authпромежуточного программного обеспечения к маршруту вы также можете указать, какую защиту следует использовать для аутентификации пользователя. Указанный сторож должен соответствовать одному из ключей в guardsмассиве вашего файла конфигурации:auth.php

public function __construct()
{
    $this->middleware('auth:api');
}

 

Регулирование входа

Если вы используете встроенный LoginControllerкласс Laravel , эта черта уже будет включена в ваш контроллер. По умолчанию пользователь не сможет войти в систему в течение одной минуты, если он не предоставит правильные учетные данные после нескольких попыток. Регулирование является уникальным для имени пользователя / адреса электронной почты пользователя и его IP-адреса.Illuminate\Foundation\Auth\ThrottlesLogins

 

Аутентификация пользователей вручную

Обратите внимание, что вы не обязаны использовать контроллеры аутентификации, включенные в Laravel. Если вы решите удалить эти контроллеры, вам нужно будет управлять аутентификацией пользователей, используя классы аутентификации Laravel напрямую. Не волнуйся, это просто!

Мы получим доступ к службам аутентификации Laravel через Auth фасад , поэтому нам нужно обязательно импортировать Authфасад в верхней части класса. Далее, давайте проверим attemptметод:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{
    /**
     * Handle an authentication attempt.
     *
     * @param  \Illuminate\Http\Request $request
     *
     * @return Response
     */
    public function authenticate(Request $request)
    {
        $credentials = $request->only('email', 'password');

        if (Auth::attempt($credentials)) {
            // Authentication passed...
            return redirect()->intended('dashboard');
        }
    }
}

attemptМетод принимает массив пар ключ / значение в качестве первого аргумента. Значения в массиве будут использоваться для поиска пользователя в таблице базы данных. Таким образом, в приведенном выше примере пользователь будет извлечен по значению emailстолбца. Если пользователь найден, хешированный пароль, хранящийся в базе данных, будет сравниваться со passwordзначением, переданным методу через массив. Вы не должны хэшировать пароль, указанный в качестве passwordзначения, так как платформа автоматически хэширует значение, прежде чем сравнивать его с хешированным паролем в базе данных. Если два хешированных пароля совпадают, для пользователя начнется сеанс с проверкой подлинности.

attemptМетод будет возвращать , trueесли аутентификация прошла успешно. В противном случае falseбудет возвращен.

intendedМетод на редиректоре перенаправляет пользователь на URL они были пытающимся доступ перед тем , как перехвачены промежуточной аутентификацией. Резервный URI может быть предоставлен этому методу, если предполагаемый пункт назначения недоступен.

Указание дополнительных условий

При желании вы также можете добавить дополнительные условия к запросу аутентификации в дополнение к электронной почте и паролю пользователя. Например, мы можем убедиться, что пользователь помечен как «активный»:

if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
    // The user is active, not suspended, and exists.
}

В этих примерах emailне является обязательной опцией, она просто используется в качестве примера. Вы должны использовать любое имя столбца, соответствующее «имени пользователя» в вашей базе данных.

Доступ к конкретным экземплярам охраны

Вы можете указать, какой экземпляр сторожа вы хотите использовать, используя guardметод на Authфасаде. Это позволяет вам управлять аутентификацией для отдельных частей вашего приложения, используя совершенно разные модели аутентификации или пользовательские таблицы.

Имя сторожа, передаваемое guardметоду, должно соответствовать одному из сторожей, настроенных в вашем файле конфигурации:auth.php

if (Auth::guard('admin')->attempt($credentials)) {
    //
}

Выход

Для выхода пользователей из вашего приложения вы можете использовать logoutметод на Authфасаде. Это очистит информацию аутентификации в сеансе пользователя:

Auth::logout();

 

Запоминание входа пользователей

Если вы хотите обеспечить функциональность «запомнить меня» в своем приложении, вы можете передать логическое значение в качестве второго аргумента attemptметода, который будет поддерживать аутентификацию пользователя в течение неопределенного времени или до тех пор, пока он не выйдет вручную. Ваша usersтаблица должна содержать строковый remember_tokenстолбец, который будет использоваться для хранения токена «запомнить меня».

if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) {
    // The user is being remembered...
}

Если вы используете встроенную программу LoginController, поставляемую с Laravel, правильная логика «запоминания» пользователей уже реализована с помощью черт, используемых контроллером.

Если вы «запоминаете» пользователей, вы можете использовать этот viaRememberметод, чтобы определить, прошел ли пользователь проверку подлинности с помощью файла cookie «запомнить меня»:

if (Auth::viaRemember()) {
    //
}

 

Другие методы аутентификации

Аутентифицировать пользовательский экземпляр

Если вам нужно зарегистрировать существующий пользовательский экземпляр в вашем приложении, вы можете вызвать loginметод с пользовательским экземпляром. Данный объект должен являться реализацией договора . Модель в комплекте с Laravel уже реализует этот интерфейс:Illuminate\Contracts\Auth\Authenticatable App\User

Auth::login($user);

// Login and "remember" the given user...
Auth::login($user, true);

Вы можете указать экземпляр охраны, который вы хотели бы использовать:

Auth::guard('admin')->login($user);

Аутентифицировать пользователя по ID

Для входа пользователя в приложение по его идентификатору вы можете использовать loginUsingIdметод. Этот метод принимает первичный ключ пользователя, которого вы хотите аутентифицировать:

Auth::loginUsingId(1);

// Login and "remember" the given user...
Auth::loginUsingId(1, true);

Аутентифицировать пользователя один раз

Вы можете использовать onceметод для входа пользователя в приложение для одного запроса. Сеансы или файлы cookie не будут использоваться, что означает, что этот метод может быть полезен при создании API без сохранения состояния:

if (Auth::once($credentials)) {
    //
}

 

Базовая аутентификация HTTP

Базовая аутентификация HTTP обеспечивает быстрый способ аутентификации пользователей вашего приложения без настройки специальной страницы входа в систему. Для начала прикрепите промежуточное ПО к вашему маршруту. Промежуточный слой входят в рамках Laravel, так что вам не нужно определить его:auth.basic auth.basic

Route::get('profile', function () {
    // Only authenticated users may enter...
})->middleware('auth.basic');

Как только промежуточное программное обеспечение будет подключено к маршруту, вам будет автоматически предложено ввести учетные данные при доступе к маршруту в вашем браузере. По умолчанию промежуточное программное обеспечение будет использовать столбец в пользовательской записи в качестве «имени пользователя».auth.basicemail

Примечание о FastCGI

Если вы используете PHP FastCGI, базовая аутентификация HTTP может работать некорректно из коробки. Следующие строки должны быть добавлены в ваш .htaccessфайл:

RewriteCond %{HTTP:Authorization} ^(.+)$
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

 

Базовая HTTP-аутентификация без сохранения состояния

Вы также можете использовать HTTP Basic Authentication без установки cookie идентификатора пользователя в сеансе, что особенно полезно для аутентификации API. Для этого определите промежуточное программное обеспечение, которое вызывает onceBasicметод. Если onceBasicметод не возвращает ответ , запрос может быть передан далее в приложение:

<?php

namespace App\Http\Middleware;

use Illuminate\Support\Facades\Auth;

class AuthenticateOnceWithBasicAuth
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, $next)
    {
        return Auth::onceBasic() ?: $next($request);
    }

}

Затем зарегистрируйте промежуточное программное обеспечение маршрута и прикрепите его к маршруту:

Route::get('api/user', function () {
    // Only authenticated users may enter...
})->middleware('auth.basic.once');

 

Выход

Чтобы вручную выйти из вашего приложения, вы можете использовать logoutметод на Authфасаде. Это очистит информацию аутентификации в сеансе пользователя:

use Illuminate\Support\Facades\Auth;

Auth::logout();

 

Аннулирование сеансов на других устройствах

Laravel также предоставляет механизм для аннулирования и «выхода» из сеансов пользователя, которые активны на других устройствах, без аннулирования сеанса на их текущем устройстве. Прежде чем начать, убедитесь, что промежуточное ПО присутствует и не прокомментировано в группе промежуточного ПО вашего класса :Illuminate\Session\Middleware\AuthenticateSessionapp/Http/Kernel.phpweb

'web' => [
    // ...
    \Illuminate\Session\Middleware\AuthenticateSession::class,
    // ...
],

Затем вы можете использовать logoutOtherDevicesметод на Authфасаде. Этот метод требует от пользователя предоставить свой текущий пароль, который ваше приложение должно принять через форму ввода:

use Illuminate\Support\Facades\Auth;

Auth::logoutOtherDevices($password);

Когда logoutOtherDevicesметод вызывается, другие сеансы пользователя будут полностью аннулированы, что означает, что они будут «отключены» от всех охранников, с которыми они были ранее аутентифицированы.

 

Добавление пользовательских охранников

Вы можете определить свои собственные средства аутентификации, используя extendметод на Authфасаде. Вы должны сделать этот звонок extendвнутри поставщика услуг . Поскольку Laravel уже поставляется с AuthServiceProvider, мы можем поместить код в этого провайдера:

<?php

namespace App\Providers;

use App\Services\Auth\JwtGuard;
use Illuminate\Support\Facades\Auth;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * Register any application authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();

        Auth::extend('jwt', function ($app, $name, array $config) {
            // Return an instance of Illuminate\Contracts\Auth\Guard...

            return new JwtGuard(Auth::createUserProvider($config['provider']));
        });
    }
}

Как вы можете видеть в приведенном выше примере, обратный вызов, передаваемый extendметоду, должен возвращать реализацию . Этот интерфейс содержит несколько методов, которые вам нужно реализовать, чтобы определить пользовательскую защиту. После того как ваш пользовательский сторож определен, вы можете использовать этот сторож в конфигурации вашего файла конфигурации:Illuminate\Contracts\Auth\Guardguardsauth.php

'guards' => [
    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ],
],

 

Охранники запроса закрытия

Самым простым способом реализации пользовательской системы аутентификации на основе HTTP-запроса является использование этого метода. Этот метод позволяет вам быстро определить процесс аутентификации, используя одно закрытие.Auth::viaRequest

Для начала вызовите метод внутри вашего метода . Метод принимает аутентификацию имя драйвера в качестве первого аргумента. Это имя может быть любой строкой, которая описывает ваш пользовательский сторож. Второй аргумент передается методе должен быть закрытием , который принимает входящий запрос HTTP и возвращает экземпляр пользователя или, если аутентификация завершается неудачно, :Auth::viaRequestbootAuthServiceProviderviaRequestnull

use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

/**
 * Register any application authentication / authorization services.
 *
 * @return void
 */
public function boot()
{
    $this->registerPolicies();

    Auth::viaRequest('custom-token', function ($request) {
        return User::where('token', $request->token)->first();
    });
}

Как только ваш драйвер аутентификации определен, вы используете его в качестве драйвера в guardsконфигурации вашего файла конфигурации:auth.php

'guards' => [
    'api' => [
        'driver' => 'custom-token',
    ],
],

 

Добавление пользовательских провайдеров

Если вы не используете традиционную реляционную базу данных для хранения ваших пользователей, вам необходимо расширить Laravel с вашим собственным поставщиком аутентификации. Мы будем использовать providerметод на Authфасаде, чтобы определить пользовательского провайдера:

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Auth;
use App\Extensions\RiakUserProvider;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * Register any application authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();

        Auth::provider('riak', function ($app, array $config) {
            // Return an instance of Illuminate\Contracts\Auth\UserProvider...

            return new RiakUserProvider($app->make('riak.connection'));
        });
    }
}

После того, как вы зарегистрировали провайдера, используя этот providerметод, вы можете переключиться на нового провайдера пользователя в вашем файле конфигурации. Сначала определите, что использует ваш новый драйвер:auth.phpprovider

'providers' => [
    'users' => [
        'driver' => 'riak',
    ],
],

Наконец, вы можете использовать этого провайдера в своей guardsконфигурации:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
],

 

Контракт с пользователем

В реализации несет ответственность только за выборку на реализацию из постоянной системы хранения данных, такие как MySQL, Riak и т.д. Эти два интерфейса позволяет механизмам аутентификации Laravel продолжать функционировать независимо от того, как данные пользователя хранятся или какой тип класса используются представлять это.Illuminate\Contracts\Auth\UserProviderIlluminate\Contracts\Auth\Authenticatable

Давайте посмотрим на контракт:Illuminate\Contracts\Auth\UserProvider

<?php

namespace Illuminate\Contracts\Auth;

interface UserProvider {

    public function retrieveById($identifier);
    public function retrieveByToken($identifier, $token);
    public function updateRememberToken(Authenticatable $user, $token);
    public function retrieveByCredentials(array $credentials);
    public function validateCredentials(Authenticatable $user, array $credentials);

}

retrieveByIdФункции , как правило , получает ключ , представляющий пользователю, например , как автоинкрементным ID из базы данных MySQL. AuthenticatableРеализация согласования ID должна быть извлечена и возвращена методом.

retrieveByTokenФункция возвращает пользователя по их уникальным $identifierи «запомнить меня» $token, хранится в поле remember_token. Как и в предыдущем методе, Authenticatableреализация должна быть возвращена.

updateRememberTokenМетод обновляет $userполе remember_tokenс новым $token. Свежий токен назначается при успешной попытке входа в систему «запомнить меня» или при выходе пользователя из системы.

retrieveByCredentialsМетод получает массив учетных данных , передаваемых методу при попытке входа в приложение. Затем метод должен «запросить» основное постоянное хранилище для пользователя, соответствующего этим учетным данным. Обычно этот метод запускает запрос с включенным условием «где» . Затем метод должен вернуть реализацию . Этот метод не должен пытаться выполнять какую-либо проверку пароля или аутентификацию.Auth::attempt$credentials['username']Authenticatable

validateCredentialsМетод должен сравнить данное $userс $credentialsцелью аутентификации пользователя. Например, этот метод, вероятно, следует использовать для сравнения значения со значением . Этот метод должен возвращать или указывать, действителен ли пароль.Hash::check$user->getAuthPassword()$credentials['password']truefalse

 

Аутентифицируемый контракт

Теперь, когда мы изучили каждый из методов UserProvider, давайте посмотрим на Authenticatableконтракт. Помните, что провайдер должен вернуть реализацию этого интерфейса из retrieveByIdretrieveByTokenи retrieveByCredentialsметоды:

<?php

namespace Illuminate\Contracts\Auth;

interface Authenticatable {

    public function getAuthIdentifierName();
    public function getAuthIdentifier();
    public function getAuthPassword();
    public function getRememberToken();
    public function setRememberToken($value);
    public function getRememberTokenName();

}

Этот интерфейс прост. getAuthIdentifierNameМетод должен возвращать имя поля «первичный ключ» пользователя и getAuthIdentifierметод должен вернуть «первичный ключ» пользователя. В серверной части MySQL, опять же, это будет автоинкрементный первичный ключ. getAuthPasswordДолжен возвращать хэш пароля пользователя. Этот интерфейс позволяет системе аутентификации работать с любым классом User, независимо от того, какой ORM или уровень абстракции хранилища вы используете. По умолчанию Laravel включает Userкласс в appкаталог, который реализует этот интерфейс, поэтому вы можете обратиться к этому классу за примером реализации.

 

События

Laravel вызывает множество событий в процессе аутентификации. Вы можете прикрепить слушателей к этим событиям в своем EventServiceProvider:

/**
 * The event listener mappings for the application.
 *
 * @var array
 */
protected $listen = [
    'Illuminate\Auth\Events\Registered' => [
        'App\Listeners\LogRegisteredUser',
    ],

    'Illuminate\Auth\Events\Attempting' => [
        'App\Listeners\LogAuthenticationAttempt',
    ],

    'Illuminate\Auth\Events\Authenticated' => [
        'App\Listeners\LogAuthenticated',
    ],

    'Illuminate\Auth\Events\Login' => [
        'App\Listeners\LogSuccessfulLogin',
    ],

    'Illuminate\Auth\Events\Failed' => [
        'App\Listeners\LogFailedLogin',
    ],

    'Illuminate\Auth\Events\Logout' => [
        'App\Listeners\LogSuccessfulLogout',
    ],

    'Illuminate\Auth\Events\Lockout' => [
        'App\Listeners\LogLockout',
    ],

    'Illuminate\Auth\Events\PasswordReset' => [
        'App\Listeners\LogPasswordReset',
    ],
];