Symfony2 Login use_referer не работает

Вот мой security.yml для входа пользователя:

user_secured_area: pattern: /* anonymous: ~ provider: user form_login: check_path: /login_check login_path: /login use_referer: true username_parameter: _email logout: path: logout target: / 

Я проверил профилировщик для HTTP_REFERRER, и у меня есть правильный референт. Однако при входе в систему он перенаправляется на корневой URL, а не на URL-адрес реферирования. Любая идея об этом или я что-то пропустил?

Контроллер:

 public function indexAction(Request $request){ $session = $request->getSession(); //get login error if($request->attributes->has(SecurityContextInterface::AUTHENTICATION_ERROR)){ $error = $request->attributes->get(SecurityContextInterface::AUTHENTICATION_ERROR); } else if(null!==$session && $session->has(SecurityContextInterface::AUTHENTICATION_ERROR)){ $error = $session->get(SecurityContextInterface::AUTHENTICATION_ERROR); $session->remove(SecurityContextInterface::AUTHENTICATION_ERROR); } else{ $error = ""; } //repopulate username $lastEmail = (null === $session) ? '' : $session->get(SecurityContextInterface::LAST_USERNAME); // a ? true : false return $this->render('BazaarBundle:Login:login.html.twig', array('last_email' => $lastEmail, 'error' => $error)); } 

Веточка:

 <form action="{{ path('login_check') }}" method="post"> <label for="email">Email:</label> <input type="text" id="email" name="_email" value="{{ last_email }}" /> <label for="password">Password:</label> <input type="password" id="password" name="_password" /> <button type="submit">login</button> 

Поведение по умолчанию – перенаправление на заданную страницу после входа в систему.

Опция use_referer используется только в том случае, если в сеансе не сохраняется URL-адрес. В противном случае вы перенаправляетесь к целевому пути по умолчанию (который может быть определен с использованием параметра default_target_path ) или по умолчанию ('/'), если параметры не определены.

Изучите атрибуты сеанса в отладчике Symfony (когда вы на странице входа). У вас есть запись _security.yourfirewall.target_path ? Какая ценность?

EDIT: Кажется, что переменная сеанса определена только в том случае, если вы автоматически перенаправлены на страницу входа (например, при попытке получить доступ к защищенной области без необходимых прав).

Другая возможность – добавить скрытое поле с именем _target_path с требуемым значением (пример ниже).

Добавление target_path по форме (возможно, должно быть хорошо проверить, не пуст ли он):

 <input type="hidden" name="_target_path" value="{{ app.request.headers.get('referer') }}" /> 

ура