symfony2 is_authenticated_fully binaryfileresponse access_control symfony ip-address

is_authenticated_fully - ¿Cómo obtengo la dirección IP del usuario en el controlador Symfony2?



symfony request (5)

Necesito almacenar la dirección IP de los usuarios que comenten en la base de datos después del envío del formulario.

¿Hay alguna función symfony2 para obtener la IP? O de otra forma para obtener la IP?


En Symfony antes de 2.3 $this->container->get(''request'')->getClientIp() funciona solo dentro del controlador de solicitud maestro. En el controlador de sub-solicitud, esto siempre devuelve 127.0.0.1 . En caso de que su proyecto utilice sub-solicitudes con Symfony 2.2, la solución a prueba de balas es crear kernel.request listener y guardar la IP de la solicitud maestra en él.

En Symfony 2.3, esto se corrigió, por lo que para las sub-solicitudes internas, la IP real se envía a la lista de proxies, consulte https://github.com/symfony/symfony/commit/2f3b33a630727cbc9cf21262817240a72a8dae0c Por lo tanto, debe agregar 127.0.0.1 a la configuración trusted_proxies parámetro para obtener la IP del cliente de la Solicitud en subpeticiones en Symfony 2.3+, pero no debe hacerlo en el alojamiento compartido por razones de seguridad.

Además, 127.0.0.1 tuvo que ser agregado a trusted_proxies explícitamente si el caché HTTP AppCache ( AppCache en web/app.php ) fue utilizado antes de Symfony 2.3.20. Este caché intenta parecerse a un proxy inverso real y modifica algunos encabezados de la solicitud maestra. Solucionado en https://github.com/symfony/symfony/commit/902efb8a84e8f0acf6a63e09afa08e3dcdd80fb9

Desde Symfony 2.4 y en 3.x, la forma preferida de acceder a la solicitud actual es usar el servicio request_stack

$this->container->get(''request_stack'')->getCurrentRequest()->getClientIp();

o inyectando Solicitud en el controlador, consulte http://symfony.com/doc/current/book/controller.html#the-request-as-a-controller-argument

public function indexAction(Request $request) { $ip = $request->getClientIp(); }

Pero la preocupación por excluir 127.0.0.1 cuando se usa en sub-solicitudes aún se aplica, pero ahora puede tratar de referirse explícitamente a la solicitud principal usando

$this->container->get(''request_stack'')->getMasterRequest()->getClientIp();


FYI, a partir de Symfony 2.0 Request::getClientIp el parameter $proxy está en deprecated . Se eliminará en Symfony 2.3.

Puedes usar

$container->get(''request'')->server->get("REMOTE_ADDR");

o como @meze respuesta

$container->get(''request'')->getClientIp();


Para Symfony 2.6+ use el siguiente código (dentro de su controlador:

$this->container->get(''request_stack'')->getCurrentRequest()->getClientIp();


Puede obtener la IP del cliente utilizando el servicio de solicitud:

$this->container->get(''request'')->getClientIp();


también hay otra forma de inyectar la IP del cliente actual en cualquier llamada de servicio o método:

acme.currentIP: class: some/service/className arguments: - "@=service(''request_stack'').getCurrentRequest().getClientIp()"