Aprende a gestionar la solicitud de publicación en tu api en Symfony con NelmioCorsBundle.

Este problema no es causado por angular, el problema es por la configuración del paquete nelmioCors que no permite la solicitud POST a su api correctamente.

Si estás enfrentando este problema, es probable que tengas NelmioCorsBundle  en tu proyecto Symfony para agregar cors-headers, de lo contrario obtendrás un error de origen cruzado.

Para resolverlo, cambie la allow_headerspropiedad de la ruta a su api a:

nelmio_cors:
    defaults:
        allow_credentials: false
        allow_origin: []
        allow_headers: []
        allow_methods: []
        expose_headers: []
        max_age: 0
        hosts: []
        origin_regex: false
    paths:
        # Important api settings :
        # Access-Control-Request-Method
        '^/api/':
            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']
            max_age: 3600
        '^/oauth/':
            allow_origin: ['*']
            allow_headers: ['X-Custom-Auth']
            allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
            max_age: 3600
        '^/':
            origin_regex: true
            allow_origin: ['^http://localhost:[0-9]+']
            allow_headers: ['X-Custom-Auth']
            allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
            max_age: 3600
            hosts: ['^api\.']

allow_origin y allow_headers se pueden establecer en * para aceptar cualquier valor, sin embargo, los métodos permitidos deben estar explícitamente listados. Las rutas deben contener al menos un elemento.

Nota: Si permite los métodos POST y tiene habilitada la anulación del método HTTP en el marco, también permitirá a los usuarios de la API realizar solicitudes PUT y DELETE.

Entonces su solicitud se puede ejecutar sin ningún tipo de problema:

$http.post('https://yoururl/api/user', {'userName': 'admin', 'password': 'test'}, {headers: {'Accept': 'application/json', 'Content-Type': 'application/json'}}).then(function success(response) {
    console.log(response);
});

Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores