- Введение
- Установка
- Аутентификация
- Двухфакторная аутентификация
- Регистрация
- Сброс пароля
- Подтверждение email
- Подтверждение пароля
#Введение
Laravel Fortify — это реализация backend-аутентификации для Laravel, не зависящая от frontend. Fortify регистрирует маршруты и контроллеры, необходимые для реализации всех функций аутентификации Laravel, включая вход, регистрацию, сброс пароля, подтверждение email и многое другое. После установки Fortify вы можете выполнить Artisan-команду route:list, чтобы увидеть зарегистрированные Fortify маршруты.
Поскольку Fortify не предоставляет собственный пользовательский интерфейс, он предназначен для работы с вашим собственным интерфейсом, который будет делать запросы к зарегистрированным маршрутам. В оставшейся части документации мы подробно рассмотрим, как делать запросы к этим маршрутам.
Помните, Fortify — это пакет, который помогает быстро начать реализацию функций аутентификации Laravel. Использовать его необязательно. Вы всегда можете вручную работать с сервисами аутентификации Laravel, следуя документации по аутентификации, сбросу пароля и подтверждению email.
#Что такое Fortify?
Как уже упоминалось, Laravel Fortify — это backend-реализация аутентификации для Laravel, не зависящая от frontend. Fortify регистрирует маршруты и контроллеры, необходимые для реализации всех функций аутентификации Laravel, включая вход, регистрацию, сброс пароля, подтверждение email и многое другое.
Использовать Fortify для работы с функциями аутентификации Laravel не обязательно. Вы всегда можете вручную работать с сервисами аутентификации Laravel, следуя документации по аутентификации, сбросу пароля и подтверждению email.
Если вы новичок в Laravel, возможно, стоит сначала изучить Laravel Breeze — стартовый набор приложений. Laravel Breeze предоставляет аутентификационный каркас с пользовательским интерфейсом на основе Tailwind CSS. В отличие от Fortify, Breeze публикует свои маршруты и контроллеры непосредственно в ваше приложение. Это позволяет изучить и освоить функции аутентификации Laravel перед использованием Fortify для их реализации.
Laravel Fortify фактически берет маршруты и контроллеры Laravel Breeze и предлагает их в виде пакета без пользовательского интерфейса. Это позволяет быстро создать backend-реализацию слоя аутентификации вашего приложения без привязки к конкретному frontend.
#Когда следует использовать Fortify?
Возможно, вы задаётесь вопросом, когда уместно использовать Laravel Fortify. Во-первых, если вы используете один из стартовых наборов приложений Laravel, установка Fortify не требуется, так как все стартовые наборы уже предоставляют полноценную реализацию аутентификации.
Если вы не используете стартовый набор и вашему приложению нужны функции аутентификации, у вас есть два варианта: реализовать аутентификацию вручную или использовать Laravel Fortify для backend-реализации этих функций.
Если вы решите установить Fortify, ваш пользовательский интерфейс будет делать запросы к маршрутам аутентификации Fortify, описанным в этой документации, для аутентификации и регистрации пользователей.
Если вы предпочитаете вручную работать с сервисами аутентификации Laravel вместо использования Fortify, вы можете следовать документации по аутентификации, сбросу пароля и подтверждению email.
#Laravel Fortify и Laravel Sanctum
Некоторые разработчики путаются в различиях между Laravel Sanctum и Laravel Fortify. Поскольку эти два пакета решают разные, но связанные задачи, они не являются взаимоисключающими или конкурирующими.
Laravel Sanctum занимается только управлением API-токенами и аутентификацией существующих пользователей с помощью сессионных куки или токенов. Sanctum не предоставляет маршрутов для регистрации пользователей, сброса пароля и т.п.
Если вы строите аутентификационный слой для приложения с API или одностраничного приложения, вполне возможно, что вы будете использовать и Laravel Fortify (для регистрации, сброса пароля и т.д.), и Laravel Sanctum (управление API-токенами, сессионная аутентификация).
#Установка
Для начала установите Fortify с помощью менеджера пакетов Composer:
composer require laravel/fortify
Затем опубликуйте ресурсы Fortify с помощью команды vendor:publish:
php artisan vendor:publish --provider="Laravel\Fortify\FortifyServiceProvider"
Эта команда опубликует действия Fortify в директорию app/Actions, которая будет создана, если её нет. Кроме того, будут опубликованы FortifyServiceProvider, файл конфигурации и все необходимые миграции базы данных.
Далее выполните миграцию базы данных:
php artisan migrate
#Провайдер сервиса Fortify
Команда vendor:publish, описанная выше, также опубликует класс App\Providers\FortifyServiceProvider. Убедитесь, что этот класс зарегистрирован в массиве providers файла конфигурации config/app.php вашего приложения.
Провайдер сервиса Fortify регистрирует опубликованные действия и указывает Fortify использовать их при выполнении соответствующих задач.
#Возможности Fortify
Файл конфигурации fortify содержит массив features. Этот массив определяет, какие backend-маршруты и функции Fortify будет по умолчанию предоставлять. Если вы не используете Fortify вместе с Laravel Jetstream, рекомендуется включать только следующие функции — базовые возможности аутентификации, которые есть в большинстве Laravel-приложений:
'features' => [
Features::registration(),
Features::resetPasswords(),
Features::emailVerification(),
],
#Отключение представлений
По умолчанию Fortify определяет маршруты, которые возвращают представления, например, экран входа или регистрации. Однако если вы создаёте одностраничное приложение на JavaScript, эти маршруты могут быть не нужны. В таком случае вы можете полностью отключить их, установив значение views в false в файле конфигурации config/fortify.php вашего приложения:
'views' => false,
#Отключение представлений и сброс пароля
Если вы отключаете представления Fortify и планируете реализовывать сброс пароля, вам всё равно нужно определить маршрут с именем password.reset, который будет отвечать за отображение вашего представления "сброс пароля". Это необходимо, потому что уведомление Illuminate\Auth\Notifications\ResetPassword генерирует URL для сброса пароля через именованный маршрут password.reset.
#Аутентификация
Для начала нужно указать Fortify, как возвращать наше представление "вход". Помните, Fortify — это библиотека без frontend. Если вам нужна готовая frontend-реализация функций аутентификации Laravel, используйте стартовый набор приложений.
Вся логика рендеринга представлений аутентификации может быть настроена с помощью соответствующих методов класса Laravel\Fortify\Fortify. Обычно этот метод вызывается из метода boot класса App\Providers\FortifyServiceProvider вашего приложения. Fortify позаботится о регистрации маршрута /login, который возвращает это представление:
use Laravel\Fortify\Fortify;
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Fortify::loginView(function () {
return view('auth.login');
});
// ...
}
Ваш шаблон входа должен содержать форму, которая отправляет POST-запрос на /login. Эндпоинт /login ожидает строковые поля email / username и password. Имя поля email / username должно совпадать со значением username в файле конфигурации config/fortify.php. Также может быть передано булево поле remember, указывающее на использование функции "запомнить меня" Laravel.
Если попытка входа успешна, Fortify перенаправит вас на URI, указанный в опции home файла конфигурации fortify вашего приложения. Если запрос был XHR, будет возвращён HTTP-ответ с кодом 200.
Если запрос не удался, пользователь будет перенаправлен обратно на экран входа, а ошибки валидации будут доступны через общий Blade-переменную $errors. В случае XHR-запроса ошибки валидации вернутся с HTTP-статусом 422.
#Настройка аутентификации пользователя
Fortify автоматически извлекает и аутентифицирует пользователя на основе предоставленных учетных данных и настроенного guard-а аутентификации. Однако иногда требуется полная настройка процесса аутентификации и поиска пользователя. К счастью, Fortify позволяет легко это сделать с помощью метода Fortify::authenticateUsing.
Этот метод принимает замыкание, которое получает входящий HTTP-запрос. Замыкание отвечает за проверку учетных данных и возврат соответствующего экземпляра пользователя. Если учетные данные неверны или пользователь не найден, замыкание должно вернуть null или false. Обычно этот метод вызывается из метода boot вашего FortifyServiceProvider:
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Laravel\Fortify\Fortify;
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Fortify::authenticateUsing(function (Request $request) {
$user = User::where('email', $request->email)->first();
if ($user &&
Hash::check($request->password, $user->password)) {
return $user;
}
});
// ...
}
#Guard аутентификации
Вы можете настроить guard аутентификации, используемый Fortify, в файле конфигурации fortify вашего приложения. Однако убедитесь, что выбранный guard реализует интерфейс Illuminate\Contracts\Auth\StatefulGuard. Если вы используете Fortify для аутентификации SPA, рекомендуется использовать стандартный guard web вместе с Laravel Sanctum.
#Настройка конвейера аутентификации
Laravel Fortify обрабатывает запросы входа через конвейер вызываемых классов. Вы можете определить собственный конвейер классов, через который должны проходить запросы входа. Каждый класс должен иметь метод __invoke, который принимает входящий экземпляр Illuminate\Http\Request и, как в middleware, переменную $next, вызываемую для передачи запроса следующему классу в конвейере.
Для определения собственного конвейера используйте метод Fortify::authenticateThrough. Он принимает замыкание, которое должно возвращать массив классов для обработки запроса входа. Обычно этот метод вызывается из метода boot класса App\Providers\FortifyServiceProvider.
Пример ниже содержит стандартное определение конвейера, которое можно использовать как отправную точку для собственных изменений:
use Laravel\Fortify\Actions\AttemptToAuthenticate;
use Laravel\Fortify\Actions\EnsureLoginIsNotThrottled;
use Laravel\Fortify\Actions\PrepareAuthenticatedSession;
use Laravel\Fortify\Actions\RedirectIfTwoFactorAuthenticatable;
use Laravel\Fortify\Fortify;
use Illuminate\Http\Request;
Fortify::authenticateThrough(function (Request $request) {
return array_filter([
config('fortify.limiters.login') ? null : EnsureLoginIsNotThrottled::class,
Features::enabled(Features::twoFactorAuthentication()) ? RedirectIfTwoFactorAuthenticatable::class : null,
AttemptToAuthenticate::class,
PrepareAuthenticatedSession::class,
]);
});
#Настройка перенаправлений
Если попытка входа успешна, Fortify перенаправит вас на URI, указанный в опции home файла конфигурации fortify вашего приложения. Если запрос был XHR, будет возвращён HTTP-ответ с кодом 200. После выхода из приложения пользователь будет перенаправлен на URI /.
Если требуется более тонкая настройка этого поведения, вы можете зарегистрировать реализации контрактов LoginResponse и LogoutResponse в контейнере сервисов Laravel. Обычно это делается в методе register класса App\Providers\FortifyServiceProvider вашего приложения:
use Laravel\Fortify\Contracts\LogoutResponse;
/**
* Register any application services.
*/
public function register(): void
{
$this->app->instance(LogoutResponse::class, new class implements LogoutResponse {
public function toResponse($request)
{
return redirect('/');
}
});
}
#Двухфакторная аутентификация
Когда функция двухфакторной аутентификации Fortify включена, пользователь должен ввести шестизначный числовой токен во время аутентификации. Этот токен генерируется с помощью временного одноразового пароля (TOTP), который можно получить в любом совместимом мобильном приложении, например Google Authenticator.
Для начала убедитесь, что модель App\Models\User вашего приложения использует трейт Laravel\Fortify\TwoFactorAuthenticatable:
<?php
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Fortify\TwoFactorAuthenticatable;
class User extends Authenticatable
{
use Notifiable, TwoFactorAuthenticatable;
}
Next, you should build a screen within your application where users can manage their two factor authentication settings. This screen should allow the user to enable and disable two factor authentication, as well as regenerate their two factor authentication recovery codes.
By default, the
featuresarray of thefortifyconfiguration file instructs Fortify's two factor authentication settings to require password confirmation before modification. Therefore, your application should implement Fortify's password confirmation feature before continuing.
#Enabling Two Factor Authentication
To begin enabling two factor authentication, your application should make a POST request to the /user/two-factor-authentication endpoint defined by Fortify. If the request is successful, the user will be redirected back to the previous URL and the status session variable will be set to two-factor-authentication-enabled. You may detect this status session variable within your templates to display the appropriate success message. If the request was an XHR request, 200 HTTP response will be returned.
After choosing to enable two factor authentication, the user must still "confirm" their two factor authentication configuration by providing a valid two factor authentication code. So, your "success" message should instruct the user that two factor authentication confirmation is still required:
@if (session('status') == 'two-factor-authentication-enabled')
<div class="mb-4 font-medium text-sm">
Please finish configuring two factor authentication below.
</div>
@endif
Далее отобразите QR-код двухфакторной аутентификации, чтобы пользователь мог отсканировать его в приложении-аутентификаторе. Если вы используете Blade для рендеринга frontend, вы можете получить SVG-код QR с помощью метода twoFactorQrCodeSvg у экземпляра пользователя:
$request->user()->twoFactorQrCodeSvg();
Если вы создаёте frontend на JavaScript, можно сделать XHR GET-запрос к эндпоинту /user/two-factor-qr-code, чтобы получить QR-код двухфакторной аутентификации пользователя. Этот эндпоинт вернёт JSON-объект с ключом svg.
#Подтверждение двухфакторной аутентификации
Помимо отображения QR-кода, предоставьте текстовое поле, куда пользователь может ввести действительный код аутентификации для "подтверждения" настройки двухфакторной аутентификации. Этот код должен быть отправлен в Laravel через POST-запрос к эндпоинту /user/confirmed-two-factor-authentication, определённому Fortify.
Если запрос успешен, пользователь будет перенаправлен обратно на предыдущий URL, а сессионная переменная status будет установлена в two-factor-authentication-confirmed:
@if (session('status') == 'two-factor-authentication-confirmed')
<div class="mb-4 font-medium text-sm">
Two factor authentication confirmed and enabled successfully.
</div>
@endif
Если запрос к endpoint подтверждения двухфакторной аутентификации был выполнен через XHR, сервер вернёт HTTP-ответ с кодом 200.
#Отображение кодов восстановления
Также следует отобразить коды восстановления двухфакторной аутентификации пользователя. Эти коды позволяют аутентифицироваться, если пользователь потерял доступ к мобильному устройству. Если вы используете Blade для frontend, получите коды восстановления через аутентифицированного пользователя:
(array) $request->user()->recoveryCodes()
Если вы создаёте frontend на JavaScript, сделайте XHR GET-запрос к эндпоинту /user/two-factor-recovery-codes. Этот эндпоинт вернёт JSON-массив с кодами восстановления пользователя.
Для регенерации кодов восстановления ваше приложение должно отправить POST-запрос к эндпоинту /user/two-factor-recovery-codes.
#Аутентификация с двухфакторной аутентификацией
Во время аутентификации Fortify автоматически перенаправит пользователя на экран вызова двухфакторной аутентификации вашего приложения. Однако если вход выполняется через XHR-запрос, JSON-ответ после успешной аутентификации будет содержать булево свойство two_factor. Вам следует проверить это значение, чтобы понять, нужно ли перенаправлять пользователя на экран двухфакторной аутентификации.
Для начала реализации двухфакторной аутентификации нужно указать Fortify, как возвращать представление вызова двухфакторной аутентификации. Вся логика рендеринга представлений Fortify настраивается через методы класса Laravel\Fortify\Fortify. Обычно этот метод вызывается из метода boot класса App\Providers\FortifyServiceProvider вашего приложения:
use Laravel\Fortify\Fortify;
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Fortify::twoFactorChallengeView(function () {
return view('auth.two-factor-challenge');
});
// ...
}
Fortify создаст маршрут /two-factor-challenge, который возвращает это представление. В шаблоне two-factor-challenge должна быть форма, отправляющая POST-запрос на endpoint /two-factor-challenge. Действие /two-factor-challenge ожидает поле code, содержащее действительный TOTP-токен, или поле recovery_code, содержащее один из кодов восстановления пользователя.
Если попытка входа успешна, Fortify перенаправит пользователя на URI, указанный в опции home файла конфигурации fortify вашего приложения. Если запрос был XHR, будет возвращён HTTP-ответ с кодом 204.
Если запрос не удался, пользователь будет перенаправлен обратно на экран вызова двухфакторной аутентификации, а ошибки валидации будут доступны через общий Blade-переменную $errors. В случае XHR-запроса ошибки валидации вернутся с HTTP-статусом 422.
#Отключение двухфакторной аутентификации
Для отключения двухфакторной аутентификации ваше приложение должно отправить DELETE-запрос к эндпоинту /user/two-factor-authentication. Помните, что эндпоинты двухфакторной аутентификации Fortify требуют подтверждения пароля перед вызовом.
#Регистрация
Для начала реализации регистрации в приложении нужно указать Fortify, как возвращать представление "регистрация". Помните, Fortify — это библиотека без frontend. Если вам нужна готовая frontend-реализация функций аутентификации Laravel, используйте стартовый набор приложений.
Вся логика рендеринга представлений Fortify настраивается через методы класса Laravel\Fortify\Fortify. Обычно этот метод вызывается из метода boot класса App\Providers\FortifyServiceProvider вашего приложения:
use Laravel\Fortify\Fortify;
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Fortify::registerView(function () {
return view('auth.register');
});
// ...
}
Fortify позаботится о регистрации маршрута /register, который возвращает это представление. Ваш шаблон register должен содержать форму, отправляющую POST-запрос на эндпоинт /register, определённый Fortify.
Эндпоинт /register ожидает строковые поля name, email-адрес / имя пользователя, password и password_confirmation. Имя поля email / username должно совпадать со значением username в файле конфигурации fortify вашего приложения.
Если попытка регистрации успешна, Fortify перенаправит пользователя на URI, указанный в опции home файла конфигурации fortify вашего приложения. Если запрос был XHR, будет возвращён HTTP-ответ с кодом 201.
Если запрос не удался, пользователь будет перенаправлен обратно на экран регистрации, а ошибки валидации будут доступны через общий Blade-переменную $errors. В случае XHR-запроса ошибки валидации вернутся с HTTP-статусом 422.
#Настройка регистрации
Процесс валидации и создания пользователя можно настроить, изменив действие App\Actions\Fortify\CreateNewUser, созданное при установке Laravel Fortify.
#Сброс пароля
#Запрос ссылки для сброса пароля
Для начала реализации функции сброса пароля нужно указать Fortify, как возвращать представление "забыли пароль". Помните, Fortify — это библиотека без frontend. Если вам нужна готовая frontend-реализация функций аутентификации Laravel, используйте стартовый набор приложений.
Вся логика рендеринга представлений Fortify настраивается через методы класса Laravel\Fortify\Fortify. Обычно этот метод вызывается из метода boot класса App\Providers\FortifyServiceProvider вашего приложения:
use Laravel\Fortify\Fortify;
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Fortify::requestPasswordResetLinkView(function () {
return view('auth.forgot-password');
});
// ...
}
Fortify позаботится о регистрации эндпоинта /forgot-password, который возвращает это представление. Ваш шаблон forgot-password должен содержать форму, отправляющую POST-запрос на эндпоинт /forgot-password.
Эндпоинт /forgot-password ожидает строковое поле email. Имя этого поля / столбца базы данных должно совпадать со значением email в файле конфигурации fortify вашего приложения.
#Обработка ответа на запрос ссылки сброса пароля
Если запрос ссылки сброса пароля успешен, Fortify перенаправит пользователя обратно на эндпоинт /forgot-password и отправит пользователю email с безопасной ссылкой для сброса пароля. Если запрос был XHR, будет возвращён HTTP-ответ с кодом 200.
После перенаправления обратно на /forgot-password после успешного запроса, сессионная переменная status может использоваться для отображения статуса попытки запроса ссылки сброса пароля.
Значение переменной сессии $status будет соответствовать одной из строк перевода, определённых в passwords файле локализации. Если вы хотите настроить это значение и ещё не опубликовали языковые файлы Laravel, вы можете сделать это с помощью команды Artisan lang:publish:
@if (session('status'))
<div class="mb-4 font-medium text-sm text-green-600">
{{ session('status') }}
</div>
@endif
Если запрос не удался, пользователь будет перенаправлен обратно на экран запроса ссылки сброса пароля, а ошибки валидации будут доступны через общий Blade-переменную $errors. В случае XHR-запроса ошибки валидации вернутся с HTTP-статусом 422.
#Сброс пароля
Для завершения реализации функции сброса пароля нужно указать Fortify, как возвращать представление "сброс пароля".
Вся логика рендеринга представлений Fortify настраивается через методы класса Laravel\Fortify\Fortify. Обычно этот метод вызывается из метода boot класса App\Providers\FortifyServiceProvider вашего приложения:
use Laravel\Fortify\Fortify;
use Illuminate\Http\Request;
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Fortify::resetPasswordView(function (Request $request) {
return view('auth.reset-password', ['request' => $request]);
});
// ...
}
Fortify позаботится о регистрации маршрута для отображения этого представления. Ваш шаблон reset-password должен содержать форму, отправляющую POST-запрос на /reset-password.
Эндпоинт /reset-password ожидает строковое поле email, поле password, поле password_confirmation и скрытое поле token, содержащее значение request()->route('token'). Имя поля "email" / столбца базы данных должно совпадать со значением email в файле конфигурации fortify вашего приложения.
#Обработка ответа на сброс пароля
Если запрос сброса пароля успешен, Fortify перенаправит обратно на маршрут /login, чтобы пользователь мог войти с новым паролем. Также будет установлена сессионная переменная status, чтобы вы могли отобразить успешный статус сброса на экране входа:
@if (session('status'))
<div class="mb-4 font-medium text-sm text-green-600">
{{ session('status') }}
</div>
@endif
Если запрос был XHR, будет возвращён HTTP-ответ с кодом 200.
Если запрос не удался, пользователь будет перенаправлен обратно на экран сброса пароля, а ошибки валидации будут доступны через общий Blade-переменную $errors. В случае XHR-запроса ошибки валидации вернутся с HTTP-статусом 422.
#Настройка сброса пароля
Процесс сброса пароля можно настроить, изменив действие App\Actions\ResetUserPassword, созданное при установке Laravel Fortify.
#Подтверждение email
После регистрации вы можете потребовать от пользователей подтверждения их email перед дальнейшим использованием приложения. Для начала убедитесь, что функция emailVerification включена в массиве features файла конфигурации fortify. Затем убедитесь, что класс App\Models\User реализует интерфейс Illuminate\Contracts\Auth\MustVerifyEmail.
После выполнения этих двух шагов новые зарегистрированные пользователи будут получать email с просьбой подтвердить владение адресом. Однако нужно указать Fortify, как отображать экран подтверждения email, который информирует пользователя о необходимости перейти по ссылке из письма.
Вся логика рендеринга представлений Fortify настраивается через методы класса Laravel\Fortify\Fortify. Обычно этот метод вызывается из метода boot класса App\Providers\FortifyServiceProvider вашего приложения:
use Laravel\Fortify\Fortify;
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Fortify::verifyEmailView(function () {
return view('auth.verify-email');
});
// ...
}
Fortify позаботится о регистрации маршрута, который отображает это представление, когда пользователь перенаправляется на эндпоинт /email/verify встроенным middleware verified Laravel.
Ваш шаблон verify-email должен содержать информационное сообщение с инструкцией пользователю перейти по ссылке подтверждения email, отправленной на его адрес.
#Повторная отправка ссылок подтверждения email
При желании вы можете добавить кнопку в шаблон verify-email, которая отправляет POST-запрос на эндпоинт /email/verification-notification. При получении запроса этот эндпоинт отправит пользователю новое письмо с ссылкой подтверждения, позволяя получить новую ссылку, если предыдущая была случайно удалена или утеряна.
Если запрос на повторную отправку ссылки подтверждения прошёл успешно, Fortify перенаправит пользователя обратно на эндпоинт /email/verify с сессионной переменной status, позволяющей отобразить информационное сообщение об успешной операции. Если запрос был XHR, будет возвращён HTTP-ответ с кодом 202:
@if (session('status') == 'verification-link-sent')
<div class="mb-4 font-medium text-sm text-green-600">
A new email verification link has been emailed to you!
</div>
@endif
#Защита маршрутов
Чтобы указать, что маршрут или группа маршрутов требует подтверждения email пользователя, добавьте встроенное middleware Laravel verified к маршруту. Это middleware зарегистрировано в классе App\Http\Kernel вашего приложения:
Route::get('/dashboard', function () {
// ...
})->middleware(['verified']);
Подтверждение пароля
В процессе разработки приложения могут возникать действия, для выполнения которых требуется подтверждение пароля пользователя. Обычно такие маршруты защищаются встроенным middleware Laravel password.confirm.
Для начала реализации функции подтверждения пароля нужно указать Fortify, как возвращать представление "подтверждение пароля". Помните, Fortify — это библиотека без frontend. Если вам нужна готовая frontend-реализация функций аутентификации Laravel, используйте стартовый набор приложений.
Вся логика рендеринга представлений Fortify настраивается через методы класса Laravel\Fortify\Fortify. Обычно этот метод вызывается из метода boot класса App\Providers\FortifyServiceProvider вашего приложения:
use Laravel\Fortify\Fortify;
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Fortify::confirmPasswordView(function () {
return view('auth.confirm-password');
});
// ...
}
Fortify позаботится об определении endpoint /user/confirm-password, который возвращает это представление. Ваш шаблон confirm-password должен содержать форму, отправляющую POST-запрос на endpoint /user/confirm-password. Endpoint /user/confirm-password ожидает поле password, содержащее текущий пароль пользователя.
Если пароль совпадает с текущим паролем пользователя, Fortify перенаправит пользователя на маршрут, к которому он пытался получить доступ. Если запрос был XHR, будет возвращён HTTP-ответ с кодом 201.
Если запрос не удался, пользователь будет перенаправлен обратно на экран подтверждения пароля, а ошибки валидации будут доступны через общий Blade-переменную $errors. В случае XHR-запроса ошибки валидации вернутся с HTTP-статусом 422.