Вступление
Хотите начать быстро? Просто запустите и в свежем приложении Laravel. Затем перейдите в браузере или по любому другому URL-адресу, назначенному вашему приложению. Эти две команды позаботятся о создании всей вашей системы аутентификации!
php artisan make:auth
php artisan migrate
http://your-app.test/register
Laravel делает реализацию аутентификации очень простой. На самом деле, почти все настроено для вас из коробки. Файл конфигурации аутентификации находится по адресу , который содержит несколько хорошо документированных опций для настройки поведения сервисов аутентификации.config/auth.php
По своей сути средства аутентификации Laravel состоят из «охранников» и «провайдеров». Охрана определяет, как пользователи проходят аутентификацию для каждого запроса. Например, Laravel поставляется с session
защитой, которая поддерживает состояние, используя хранилище сеансов и куки.
Поставщики определяют способ извлечения пользователей из вашего постоянного хранилища. Laravel поставляется с поддержкой поиска пользователей с помощью Eloquent и построителя запросов к базе данных. Тем не менее, вы можете определить дополнительных поставщиков, необходимых для вашего приложения.
Не волнуйтесь, если все это звучит странно! Многим приложениям никогда не потребуется изменять конфигурацию аутентификации по умолчанию.
База данных
По умолчанию Laravel включает модель Eloquent в ваш каталог. Эта модель может использоваться с драйвером аутентификации Eloquent по умолчанию. Если ваше приложение не использует Eloquent, вы можете использовать драйвер аутентификации, который использует построитель запросов Laravel.App\User
app
database
При построении схемы базы данных для модели убедитесь, что длина столбца пароля не менее 60 символов. Поддержание длины столбца строки по умолчанию 255 символов было бы хорошим выбором.App\User
Кроме того, вы должны убедиться, что ваша users
(или эквивалентная) таблица содержит строковый remember_token
столбец, который может содержать нуль . Этот столбец будет использоваться для хранения токена для пользователей, которые выбирают опцию «запомнить меня» при входе в приложение.
Быстрый старт аутентификации
Laravel поставляется с несколькими встроенными контроллерами аутентификации, которые расположены в пространстве имен. Он обрабатывает регистрацию нового пользователя, обрабатывает аутентификацию, обрабатывает ссылки электронной почты для сброса паролей и содержит логику для сброса паролей. Каждый из этих контроллеров использует черту для включения своих необходимых методов. Для многих приложений вам вообще не нужно изменять эти контроллеры.App\Http\Controllers\Auth
RegisterController
LoginController
ForgotPasswordController
ResetPasswordController
Маршрутизация
Laravel предоставляет быстрый способ создать все маршруты и представления, необходимые для аутентификации, с помощью одной простой команды:
php artisan make:auth
Эта команда должна использоваться в свежих приложениях и будет устанавливать представление макета, представления регистрации и входа в систему, а также маршруты для всех конечных точек аутентификации. HomeController
Будет также сгенерировано A для обработки запросов после входа на панель управления вашего приложения.
Если ваше приложение не требует регистрации, вы можете отключить его, удалив вновь созданные
RegisterController
и модифицируя декларацию маршрута: .Auth::routes(['register' => false]);
Просмотры
Как упоминалось в предыдущем разделе, команда создаст все представления, необходимые для аутентификации, и поместит их в каталог.php artisan make:auth
resources/views/auth
Команда также создаст каталог, содержащий базовый макет для вашего приложения. Все эти представления используют CSS-среду Bootstrap, но вы можете настроить их по своему усмотрению.make:auth
resources/views/layouts
Проверка подлинности
Теперь, когда у вас есть настройки маршрутов и представлений для включенных контроллеров аутентификации, вы готовы регистрировать и аутентифицировать новых пользователей для вашего приложения! Вы можете получить доступ к своему приложению в браузере, поскольку контроллеры аутентификации уже содержат логику (по своим признакам) для аутентификации существующих пользователей и сохранения новых пользователей в базе данных.
Настройка пути
Когда пользователь успешно аутентифицирован, он будет перенаправлен на /home
URI. Вы можете настроить расположение перенаправления после аутентификации путем определения redirectTo
собственности на LoginController
, RegisterController
, ResetPasswordController
и 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
метод вашего LoginController
, RegisterController
и 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.
}
В этих примерах
Доступ к конкретным экземплярам охраны
Вы можете указать, какой экземпляр сторожа вы хотите использовать, используя 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.basic
email
Примечание о 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\AuthenticateSession
app/Http/Kernel.php
web
'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\Guard
guards
auth.php
'guards' => [
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
Охранники запроса закрытия
Самым простым способом реализации пользовательской системы аутентификации на основе HTTP-запроса является использование этого метода. Этот метод позволяет вам быстро определить процесс аутентификации, используя одно закрытие.Auth::viaRequest
Для начала вызовите метод внутри вашего метода . Метод принимает аутентификацию имя драйвера в качестве первого аргумента. Это имя может быть любой строкой, которая описывает ваш пользовательский сторож. Второй аргумент передается методе должен быть закрытием , который принимает входящий запрос HTTP и возвращает экземпляр пользователя или, если аутентификация завершается неудачно, :Auth::viaRequest
boot
AuthServiceProvider
viaRequest
null
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.php
provider
'providers' => [
'users' => [
'driver' => 'riak',
],
],
Наконец, вы можете использовать этого провайдера в своей guards
конфигурации:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
],
Контракт с пользователем
В реализации несет ответственность только за выборку на реализацию из постоянной системы хранения данных, такие как MySQL, Riak и т.д. Эти два интерфейса позволяет механизмам аутентификации Laravel продолжать функционировать независимо от того, как данные пользователя хранятся или какой тип класса используются представлять это.Illuminate\Contracts\Auth\UserProvider
Illuminate\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']
true
false
Аутентифицируемый контракт
Теперь, когда мы изучили каждый из методов UserProvider
, давайте посмотрим на Authenticatable
контракт. Помните, что провайдер должен вернуть реализацию этого интерфейса из retrieveById
, retrieveByToken
и 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',
],
];
0 комментариев