Я пытаюсь настроить систему аутентификации, используя Laravel Sanctum и Fortify для серверной части и Angular для интерфейса.
Внешний интерфейс работает на локальном хосте: 4200
серверная часть работает на: localhost:8000
Я следовал этому учебнику по распространенным ошибкам и соответствующим образом настроил файл .env. так это выглядит так:
SESSION_DRIVER=file
SESSION_LIFETIME=120
SESSION_DOMAIN=localhost
SANCTUM_STATEFUL_DOMAINS=localhost:4200
FRONTEND_URL=http://localhost:4200
и моя конфигурация cors.php:
<?php
return [
'paths' => ['*'],
'allowed_methods' => ['*'],
'allowed_origins' => [env('FRONTEND_URL', 'http://localhost:4200')],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => true,
];
Для входа в систему моих пользователей я использую эту функцию службы angular:
options = {
headers: new HttpHeaders({
Accept: 'application/json',
}),
withCredentials: true,
}
login(email: string, password: string): Observable<any> {
return this.http
.get(this.baseUrl + '/sanctum/csrf-cookie', this.options)
.pipe(
switchMap(() =>
this.http.post(
this.baseUrl + '/login',
{ email, password },
this.options
)
)
);
}
проблема в том, что когда я пытаюсь войти в систему, я получаю код ошибки 419, говорящий о несоответствии токена CSRF.
просмотрев файлы cookie в консоли браузера, список пуст, поэтому файлы cookie не передаются, даже если запрос /csrf-cookie выполнен успешно
Что я делаю не так с ней? это служба angular или моя внутренняя конфигурация?






Я наконец решил проблему, спросив во всех возможных источниках, давайте поговорим об этом:
Похоже, что конкретно на MacOS, если вы попытаетесь отправить запрос с локального хоста: 4200, заголовки Origin и Refero не будут соответствовать заголовку Host по какой-то причине.
я решил это изменение при каждом появлении localhost в моих файлах Laravel .env и config, а затем перешел на 127.0.0.1:4200 внутри браузера вместо localhost:4200
это немного странно объяснять, но это заставляет запросы поступать к одному и тому же источнику, даже если ключевое слово localhost должно означать IP-адрес 127.0.0.1 по умолчанию.
надеюсь, это поможет кому-то