@regex29

Аутентификация и XSRF-TOKEN в laravel и react?

Здравствуйте! Пробую сделать аутентификация с помощью laravel, sanctum и react. Laravel находится по адресу agency.api, react по localhost:3000. Всё делаю по документации Sanctum.

app/Http/Kernel.php - раскомментировал
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,

config/cors.php
'supports_credentials' => true,

resources/js/bootstrap.js
axios.defaults.withCredentials = true;

.env
SANCTUM_STATEFUL_DOMAINS=localhost:3000
SESSION_DOMAIN=.agency.api


Потом делаю запрос
const http = axios.create({
          baseURL: 'http://agency.api/',
          withCredentials: true,
          headers: {
            'X-Requested-With': 'XMLHttpRequest',
          },
        });
const csrf = await http.get('/sanctum/csrf-cookie')
console.log('csrf = ', csrf);

Как я понимаю на этом этапе должны установится куки "XSRF-TOKEN" и "laravel_session", но их нет.
1.Что я делаю не так? Почему они не устанавливаются?
2.Если куки установятся и потом залогинится, тогда такие маршруты будут доступны только залогиненным пользователям?
Route::group(['middleware' => 'auth:sanctum'], function () {
    Route::get('login/test', [LoginController::class, 'test']);
});

Ну и такой запрос выполняется с ошибкой
await http.get('/sanctum/csrf-cookie')
                .then((res) => {
                    console.log('csrf = ', res);
                    http.post('/api/login', {
                        email: 'user@mail.ru',
                        password: 'password',
                    });
                })
                .catch((er) => {
                    console.log(er)
                });

получаю это. 419 ошибка проверки CSRF как я понимаю
63131cab75a7f882873503.png
  • Вопрос задан
  • 1166 просмотров
Решения вопроса 1
@regex29 Автор вопроса
Решил таким путём:
api домен - api.agency.test
spa домен - agency.test

Как бы в документации так и написано, что должен быть одинаковый домен верхнего уровня.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
dima9595
@dima9595
Junior PHP
Как я вас понимаю. Я то же долго мучался с этим, только вместо реакта использовал vue.

Может вам поможет мой вариант:
Я в hosts файл (C:\Windows\System32\drivers\etc) добавил:
127.0.0.1 stie.ru api.site.ru
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы