2016-12-05 3 views
0

J'utilise CORS nelmio sous Symfony3 avec la configuration suivanteCors Symfony3-Nelmio sur le post ne fonctionne pas

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\.'] 

qui fonctionne bien sur GET mais quand j'essaie d'utiliser avec POST je reçois

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

Quel est le problème avec cette configuration?

Répondre

0

Je ne suis pas sûr, mais, dans vos chemins, il y a ^/api/, et dans votre message d'erreur, il n'y a que http://localhost:8080. Essayez de changer le routage de votre contrôleur POST en /api/something. Laissez-moi savoir si cela fonctionne.


Mise à jour:

Je ne sais pas Nelmio Cors assez, mais si vous ne prévoyez pas utiliser la gestion des en-têtes complexes i propose l'approche, qui Woks dans mon cas (sans paquet externe):

auditeur Ajouter: 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'); 
    } 
} 

et l'enregistrer dans les services: app/config/services.yml

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

Je sais que ce n'est pas une réponse exacte à votre question, mais j'espère que cela peut aider.

+0

Je ne pense pas que ce serait un problème que l'URL est l'origine pas un point de terminaison API – fefe