Capturar Headers de Respuesta en Symfony vía AJAX

Hola, [email protected] Un saludo...

Mi duda. Estoy creando un API REST y necesito retornar, aparte del contenido, el valor del un token dentro de una cabecera HTTP creada por mí. La creación de headers en Symfony es fácil. Ejemplo:

$response = new Response();
$response->headers->set('X-CONTENT-HASH,'elValorDelToken');
 
return $response;

Según, información leída, la captura de estos headers debería hacerse así:

$.ajax({
        url: 'url',
        type: 'post',
        data: { token: 'pass1' },
        dataType: 'json',
        success: function(data, status, xhr){
            console.log(xhr.getResponseHeader("X-TOKEN"));
        }
    });

Pero, el valor que retorna es null. ¿Alguien ha hecho algo similar? ¿Se puede?

Muchas gracias!

Respuestas

#1

El código que muestras parece correcto. ¿Puedes probar a mostrar por consola el contenido de xhr. getAllResponseHeaders() a ver si existe alguna cabecera o son todas null?

#2

Claro que sí Javier. Estoy siguiendo este ejemplo de listener pre | post Controller. El token que se genera en el post controller es que el quiero atrapar en el AJAX.

Te muestro el resultado del console...

$.ajax({
        url: 'url',
        type: 'post',
        data: { token: 'pass1' },
        dataType: 'json',
        success: function(data, status, xhr){
            console.log(data);
            console.log(status);
            console.log(xhr);
            console.log(xhr.getResponseHeader("X-CONTENT-HASH"));
        }
    });

Saludos!

#3

Buenas cristian_angulo, porque no mandas el header desde el cliente en cada petición al servidor y sea el servidor el que compruebe que esa cabecera existe para dar permiso a utilizar el servicio.

#4

Hola Cristian, te faltó hacer el console.log de xhr.getAllResponseHeaders(), ya que haciendo solo console.log(xhr) no te va a mostrar todas los headers retornados por la petición. Entonces la idea es hacer un console.log(xhr.getAllResponseHeaders()) para ver si realmente viene el header o no.

Por otro lado, puedes tambien revisar con la consola de chrome, inspeccionar la petición ajax y revisar si viene el header que necesitas en dicha consulta.

Saludos!