Laravel 8 Условное перенаправление входа в систему

laravel

Laravel 8 представляет Fortify, новый пакет для предоставления услуг аутентификации пользователей. 

Предположим, нам нужно перенаправить пользователя, так как он входит в систему на основе какого-то атрибута пользователя. С помощью Fortify, как это может быть возможно?

Нам потребуется Laravel\Fortify\FortifyServiceProvider.

Создайте наш собственный класс Response для входа в систему

  1. Создайте папку в разделе app\Http под названием Responses
  2. Создайте файл 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.

Рейтинг
( 1 оценка, среднее 5 из 5 )
Maxyc Webber/ автор статьи
Мне 35 лет. Опыт профессиональной разработки 15 лет. Занимаюсь разработкой и поддержкой корпоративных систем автоматизации бизнеса, а также высоконагруженными проектами. Мне нравится решать нестандартные проблемы бизнеса. Имею опыт формирования команд под проект, налаживания процесса разработки, коммуникации программистов и заказчиков. Есть опыт работы с зарубежными заказчиками (ОАЭ, Польша, Германия, Швейцария).
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.