Ошибка с CORS в проекте с Angular и Laravel

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

Пользовательский контроллер:

public function store(Request $request){

$credentials = $request->only('email','password');

if (Auth::attempt($credentials, $request->filled('remember'))) {
    $request->session()->regenerate();

    return redirect()->intended('/');
}
return back()->withErrors([
    'email' => 'The provided credentials do not match our records.',
]);

}

API.php:

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
});

Route::post('/users/store', [UserController::class, 'store']);

Корс.php: <?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class Cors
{
/**
 * Handle an incoming request.
 *
 * @param  \Closure(\Illuminate\Http\Request): 
(\Symfony\Component\HttpFoundation\Response)  $next
 */
public function handle(Request $request, Closure $next): Response
{
    $response = $next($request);

    $response->headers->set('Access-Control-Allow-Origin', '*');
    $response->headers->set('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT, DELETE, HEAD');
    $response->headers->set('Access-Control-Allow-Headers', 'Content-Type, Accept, Authorization, X-Requested-With, Application');
    return $response;
}

}

А это мой сервис от Angular:

loginUser(userData: any): Observable<any>{
const requestOptions = {
    withCredentials: true
};
return this.http.post('http://localhost:8000/api/users/store', userData, requestOptions);

}


And the error message when I press the button for login:

Доступ к XMLHttpRequest по адресу «http://localhost:8000/api/users/store» из источника «http://localhost:4200» заблокирован политикой CORS: ответ на предполетный запрос не проходит проверку контроля доступа: Значение заголовка «Access-Control-Allow-Origin» в ответе не должно быть подстановочным знаком «*», если режим учетных данных запроса — «include». Режим учетных данных запросов, инициированных XMLHttpRequest, контролируется атрибутом withCredentials. сообщение: «Ответ об ошибке HTTP для http://localhost:8000/api/users/store: 0 неизвестная ошибка» POST http://localhost:8000/api/users/store net::ERR_FAILED

Во-первых, laravel включает в себя функциональность Cors: laravel.com/docs/11.x/routing#cors

Maksim 06.04.2024 22:47

См. Developer.mozilla.org/en-US/docs/Web/HTTP/…

jub0bs 07.04.2024 03:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
100
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Добавьте это в свой Cors.php:

$response->headers->set('Access-Control-Allow-Credentials', 'true');

Я добавил его, и он все еще не работает для меня.

starnix 06.04.2024 19:28

@starnix, появляется ли еще какая-нибудь ошибка после добавления?

pilotman 06.04.2024 19:50

та же ошибка, я создаю маршруты в Angular, а не в web.php, это не имеет к этому никакого отношения, верно?

starnix 06.04.2024 22:07

Мне удалось устранить ошибку. Как я уже упоминал, процесс регистрации работал нормально, но не вход в систему. В Laravel произошел конфликт, потому что фреймворк сам создает файл cors.php, а затем я создал еще один Cors.php, которым я поделился в своем вопросе. Кажется, единственное, что мне нужно было сделать, это закомментировать все внутри файла, созданного Laravel по умолчанию (cors.php), и изменить тот, который я создал, оставив его таким, чтобы он принимал запросы, поступающие от Angular:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class Cors
{
/**
 * Handle an incoming request.
 *
 * @param  \Closure(\Illuminate\Http\Request): 
(\Symfony\Component\HttpFoundation\Response)  $next
 */
public function handle(Request $request, Closure $next): Response
{
    $response = $next($request);

    $response->headers->set('Access-Control-Allow-Credentials', 'true');
    $response->headers->set('Access-Control-Allow-Origin', 'http://localhost:4200');
    $response->headers->set('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT, DELETE, HEAD');
    $response->headers->set('Access-Control-Allow-Headers', 'Content-Type, Accept, Authorization, X-Requested-With, Application');
    return $response;
}
}

Если кто-то еще сталкивается с этой проблемой с laravel 11 и Angular, сначала запустите php artisan config:public cors, который создаст файл cors.php в папке конфигурации, затем убедитесь, что следующие настройки настроены.

'paths' => ['api/*', 'sanctum/csrf-cookie'],

'allowed_methods' => ['*'],

'allowed_origins' => ['http://localhost:4200'],

'allowed_origins_patterns' => [],

'allowed_headers' => ['*'],

'exposed_headers' => [],

'max_age' => 0,

'supports_credentials' => true,

Другие вопросы по теме