Как сделать общую авторизация для всех поддоменов?

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

Шаг 1: Настройте поддомены
Сначала вам нужно настроить поддомены для вашего приложения. В файле config/app.php найдите ключ url и установите его значение в формате http://{subdomain}.example.com, где {subdomain} - это переменная для поддомена. Например, если у вас есть поддомены "admin" и "api", то значение url будет http://{subdomain}.example.com.

Шаг 2: Настройка маршрутов
Затем вам нужно настроить маршруты для каждого поддомена. Создайте файл маршрута для каждого поддомена в директории routes/{subdomain}.php. Например, для поддомена "admin" создайте файл routes/admin.php, а для поддомена "api" создайте файл routes/api.php. В каждом из этих файлов маршрута вы можете определить свой набор маршрутов, которые будут доступны для соответствующего поддомена.

Шаг 3: Настройка маршрутизации
Далее вам нужно настроить маршрутизацию для каждого поддомена. В файле app/Providers/RouteServiceProvider.php найдите метод map() и добавьте следующий код:

public function map()
{
    $this->mapApiRoutes();

    $this->mapWebRoutes();

    // Добавьте следующий код
    $this->mapSubdomainRoutes();
}

protected function mapSubdomainRoutes()
{
    $subdomains = ['admin', 'api'];

    foreach ($subdomains as $subdomain) {
        Route::middleware('web')
             ->namespace($this->namespace)
             ->domain("{$subdomain}." . config('app.domain'))
             ->group(base_path("routes/{$subdomain}.php"));
    }
}

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

Шаг 4: Настройка сессий
Чтобы сделать общую авторизацию для всех поддоменов, вам также необходимо настроить сессии. В файле config/session.php установите значение domain равным .example.com. Важно добавить в начало точку перед именем домена, чтобы включить субдомены.

'domain' => '.example.com',

Это позволит разделить сессии между разными поддоменами, что позволит вам использовать одну авторизацию для всех поддоменов.

Шаг 5: Настройка CSRF-токена
Если вы используете защиту CSRF в вашем приложении, вам необходимо настроить CSRF-токен для работы с поддоменами. В файле app/Http/Middleware/VerifyCsrfToken.php найдите метод protected function isReading($request) и добавьте следующий код:

protected function isReading($request)
{
    if (in_array($request->method(), ['HEAD', 'GET', 'OPTIONS'])) {
        return true;
    }

    return starts_with($request->fullUrl(), config('app.url'));
}

Это позволит разрешить чтение CSRF-токена с разных поддоменов.

Шаг 6: Общая авторизация
Теперь, когда у вас есть настроенные поддомены, маршруты, сессии и CSRF-токены, вы можете использовать общую авторизацию для всех поддоменов. Laravel по умолчанию использует провайдер аутентификации web, который уже содержит маршруты и представления для аутентификации. Вам просто нужно убедиться, что вы используете web-маршруты и маршруты проверки аутентификации для всех ваших поддоменов.

Надеюсь, эта подробная инструкция поможет вам сделать общую авторизацию для всех поддоменов в Laravel.