Laravel 8 представляет Fortify, новый пакет для предоставления услуг аутентификации пользователей.
Предположим, нам нужно перенаправить пользователя, так как он входит в систему на основе какого-то атрибута пользователя. С помощью Fortify, как это может быть возможно?
Нам потребуется Laravel\Fortify\FortifyServiceProvider
.
Создайте наш собственный класс Response для входа в систему
- Создайте папку в разделе app\Http под названием
Responses
- Создайте файл
LoginResponse.php
<?php
namespace App\Http\Responses;
use Illuminate\Support\Facades\Auth;
use Laravel\Fortify\Contracts\LoginResponse as LoginResponseContract;
class LoginResponse implements LoginResponseContract
{
public function toResponse($request)
{
// below is the existing response
// replace this with your own code
// the user can be located with Auth facade
return $request->wantsJson()
? response()->json(['two_factor' => false])
: redirect()->intended(config('fortify.home'));
}
}
Укажите Laravel использовать наш новый класс Response
Этот новый класс теперь заменяет Синглтон, ранее зарегистрированный Fortify.
Отредактируйте файл JetstreamServiceProvider
в своей app\Providers
папке;
В методе загрузки добавьте ссылку на ваш новый класс response. Когда вход в систему завершится (и пользователь фактически аутентифицируется), будет вызван ваш новый response.
public function boot()
{
$this->configurePermissions();
Jetstream::deleteUsersUsing(DeleteUser::class);
// register new LoginResponse
$this->app->singleton(
\Laravel\Fortify\Contracts\LoginResponse::class,
\App\Http\Responses\LoginResponse::class
);
}
Двухфакторная Аутентификация
Если вы используете 2FA с Jetstream, вам также нужно будет поймать TwoFactorLoginResponse. Используйте тот же подход;
// register new TwofactorLoginResponse
$this->app->singleton(
\Laravel\Fortify\Contracts\TwoFactorLoginResponse::class,
\App\Http\Responses\LoginResponse::class
);
Вы можете вернуть тот же ответ или создать дополнительный ответ, Если вам нужно другое поведение для пользователей, которые входят в систему с помощью 2FA.