@amigo567

Sanctum, авторизация на основе сессии, как сделать для двух разных доменов?

Фронт: local.cars.com:8080 (VUE spa)
Бек: https://api.cars.test (laravel api)

Возможно ли использовать встроенный в php механизм авторизации (на основании сессии)?
Уже много месяцев не могу разобраться с sanctum и авторизицией в целом, как бек и фронт должны взаимодействовать друг с другом (прошу не отправлять видео, статьи, оффициальную документацию - не помогают, нейронные сети тоже не могут нормально объяснить и выдать рабочий пример).

Ведь должно быть всё просто:
1) Отправляем на сервер (POST https://api.cars.test/login)
2) Бек смотрит, есть ли этот домен "local.cars.com:8080" в списке разрешённых
3) Если нет его в списке, то возвращает ошибку
4) Иначе ларавел проверяет полученную пару логин-пароль, при успехе - создаёт файл (сессиию) на жёстком диске (кладёт туда разные данные, логин, пароль, ещё может что-то), шифрует ключ (зачем?, ключ сессии = название файла?) и отправляет этот ключ обратно клиенту (с заголовком setcookie? эта информация нужна для браузера?)
5) Браузер устанавливает куку
6) При каждом последующем запросе бразуер автоматически отправляет эту куку серверу (не нужно самостоятельно принимать куку и сохранять её где-то наподобии localstorage?)
7) Сервер шифрует полученный ключ=куку, ищет шифрованную версию в папке sessions, если нашёл что-то, то продолжает обработку запроса?

А вот есть ещё токены, которые хранятся в таблице (в БД), их тоже можно отправить клиенту с заголовком setcookie? чтобы не возиться с локальным хранением этого ключа (он ведь ещё и не должен сбрасываться после рефреша страницы) и потом автоматически отправлялся при каждом последующем запросе (отправке запроса на сервер).

P.S. где найти реализацию метода Auth::guard('web')->login($user); здесь используется файл сессии?

Если для вышеперечисленных доменов я хочу использовать файл сессии, то какие middleware должны быть (все маршруты в api.php объявлены)?
spoiler
protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
           \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
        ],
    ];
  • Вопрос задан
  • 178 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы