Я полностью понимаю, что тестирую его на своем локальном хосте, но мне интересно, должен ли он возвращать реальный IP-адрес моего ноутбука или как на самом деле loopback ':: 1' в каждом из следующих случаев ... Будет ли он работать по-другому в производстве или я упустить момент?
С контроллера
<?php
namespace SD\UserBundle\Controller;
use FOS\UserBundle\Controller\SecurityController as OriginalController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
class SecurityController extends OriginalController
{
public function loginAction(Request $request)
{
$clientIp = $this->get('request_stack')
->getMasterRequest()
->getClientIp()
;
if ($this->get('sd_user.ip_foresight')->isBlackListed($clientIp))
{
return new RedirectResponse(
$this->generateUrl('sd_user_forbidden')
);
}
return parent::loginAction($request);
}
}
От слушателя
<?php
namespace SD\UserBundle\EventListener;
use Symfony\Component\HttpFoundation\RequestStack;
class IpListener implements EventSubscriberInterface
{
protected $requestStack;
public function __construct(RequestStack $requestStack)
{
$this->requestStack = $requestStack;
}
public function clientIp()
{
return $this->requestStack->getMasterRequest()->getClientIp();
}
// ...




Вы делаете это правильно. Посмотрим, откуда берется IP-адрес:
Request информацией, предоставленной веб-сервером.Таким образом, в конечном итоге вы получаете IP-адрес клиента real, а не тот, который был переопределен каким-то действием, которое вызывало подзапрос.
Но есть одно исключение, когда вы используете балансировщик нагрузки, в этом случае просто прочтите официальную документацию:
Как настроить Symfony для работы за балансировщиком нагрузки или обратным прокси
@vadimashikhman: На данный момент я не решил использовать прокси, но детали вашего ответа мне немного больше помогают. Так что я думаю, что на моем ноутбуке нет другого способа получить результат, отличный от «:: 1». Спасибо.
@cerad: Моя идея состоит в том, чтобы запретить простому пользователю, уже зарегистрированному, получить доступ к подключенной части моего сайта, собирая его IP-адрес при каждом подключении, если происходит плохое поведение, например, очень грубые комментарии, я оставляю за собой право заблокировать этот человек. Очевидно, это ограничено.
@SylvainDemaimay, также учитывайте динамические IP-адреса, это обычная практика, когда вы выделяете один IP-адрес для всего офиса компании, и когда вы блокируете только 1 человека, никто из этого же офиса не может получить доступ к вашему сайту
@SylvainDemaimay, если этот ответ решит вашу проблему, не забудьте отметить его как принятый, спасибо.
Можно также отметить, что для клиента тривиально подделать IP-адрес, поэтому блокировка не помешает определенному пользователю.