2016-12-05 2 views
0

Я использую nelmio CORS под Symfony3 со следующей установкойSymfony3-Nelmio Корс на пост не работает

nelmio_cors: 
     defaults: 
      allow_credentials: false 
      allow_origin: [] 
      allow_headers: [] 
      allow_methods: [] 
      expose_headers: [] 
      max_age: 0 
      #hosts: [] 
      origin_regex: false 
     paths: 
      '^/api/': 
       origin_regex: true 
       allow_origin: ['*'] 
       allow_headers: ['X-Custom-Auth','Content-Type','X-Requested-With','Accept','Origin','Access-Control-Request-Method','Access-Control-Request-Headers','Authorization'] 
       allow_methods: ['POST', 'PUT', 'GET', 'DELETE'] 
       expose_headers: [] 
       max_age: 3600 
      '^/': 
       origin_regex: true 
       allow_origin: ['*'] 
       allow_headers: ['X-Custom-Auth'] 
       allow_methods: ['POST', 'PUT', 'GET', 'DELETE'] 
       max_age: 3600 
       hosts: ['^api\.'] 

который работает отлично на GET, но когда я пытаюсь использовать с POST я получаю

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access.

Что не так с этой настройкой?

ответ

0

Я не уверен, но на ваших путях есть ^/api/, а в вашем сообщении об ошибке есть только http://localhost:8080. Попробуйте изменить маршрутизацию вашего контроллера POST на /api/something. Дайте мне знать, если это сработает.


Update:

Я не знаю Nelmio Корса достаточно, но если вы не планируете использовать сложные управления заголовками я предлагаю подход, что ковшики в моем случае (без внешнего пучка):

Добавить слушатель: src/AppBundle/Listentes/CorsListener.php

<?php 
namespace AppBundle\Listener; 

use Symfony\Component\HttpKernel\Event\FilterResponseEvent; 

class CorsListener 
{ 
    public function onKernelResponse(FilterResponseEvent $event) 
    { 
     $responseHeaders = $event->getResponse()->headers; 

     $responseHeaders->set('Access-Control-Allow-Headers', 'origin, content-type, accept'); 
     $responseHeaders->set('Access-Control-Allow-Origin', '*'); 
     $responseHeaders->set('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, PATCH, OPTIONS'); 
    } 
} 

и зарегистрировать его в службах: app/config/services.yml

services: 
    app.cors_listener: 
     class:  AppBundle\Listener\CorsListener 
     tags: 
      - { name: kernel.event_listener, event: kernel.response, method: onKernelResponse } 

Я знаю, что это не точный ответ на ваш вопрос, но надеюсь, что он может помочь.

+0

Я не думаю, что это было бы проблемой, поскольку url является источником не API конечной точки – fefe

Смежные вопросы