Обработка предполетных запросов из приложения React в Symfony сейчас становится слишком сложной, я пытаюсь исправить это в течение последних 8 часов. Вот ошибка, которую я получаю,
Access to XMLHttpRequest at 'https://mylocaldomain.com/validate-token' from origin 'http://myreactapplocal:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
Я попытался добавить код из этого сообщения в здесь в public / index.php, и это сработало, я пытаюсь реализовать то же самое в слушателе, поскольку я не хочу редактировать public / index.php, и он не работает через слушателя, ниже мой код слушателя
namespace App\EventListener;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\HttpKernel;
use Symfony\Component\HttpKernel\KernelEvents;
class CorsListener implements EventSubscriberInterface
{
private $container;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
public static function getSubscribedEvents(): array
{
return [
RequestEvent::class => 'onRequestEvent',
ResponseEvent::class => 'onResponseEvent',
];
}
public function onRequestEvent(RequestEvent $event)
{
if (HttpKernel::MASTER_REQUEST != $event->getRequestType()) {
return;
}
$request = $event->getRequest();
$method = $request->getRealMethod();
if ('OPTIONS' === $method) {
$response = new Response();
$response->headers->set('Access-Control-Allow-Headers', 'X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method,Access-Control-Request-Headers, Authorization');
$event->setResponse($response);
}
}
public function onResponseEvent(ResponseEvent $event)
{
// Don't do anything if it's not the master request.
if (!$event->isMasterRequest()) {
return;
}
$response = $event->getResponse();
$response->headers->set('Access-Control-Allow-Origin', '*');
$response->headers->set('Access-Control-Allow-Methods', 'GET,POST,PUT,OPTIONS,PATCH,DELETE');
$response->headers->set('Access-Control-Allow-Headers', 'Content-Type,Authorization');
}
}
Приветствуется любая помощь / способ решения этой проблемы!
bin/console debug:event-dispatcher OR debug:container
- person qdequippe   schedule 06.07.2021