2016-01-06 2 views
0

Хорошо, поэтому я знаю, как это сделать через брандмауэр. Мне любопытно, как Symfony делает это под капотом и как это можно реплицировать вручную.Symfony2 Руководство Переадресация на вход, сохранение _security.main.target_path

Я пытался что-то вроде:

return $this->redirect('/login', 301); 

Но когда я делаю это, она теряет

_security.main.target_path 

И таким образом, когда пользователь входит в систему, они больше не перенаправляются на страницу они были.

Как перенаправить войти в манере, которая повторяет брандмауэр и, таким образом, сохраняет

_security.main.target_path 

?

ответ

0

Попробуйте с помощью следующего кода

установки добавить в ваш файл security.yml

#app/config/security.yml 
security: 
    firewalls: 
     main: 
      form_login: 
       always_use_default_target_path: true 
       target_path_parameter: redirect_url 

ваша форма Логин должен иметь следующие ввода тега

<input type="hidden" name="_target_path" value="account" /> 

как ваша форма

<form action="{{ path('login_check') }}" method="post"> 
    <label for="username">Username:</label> 
    <input type="text" id="username" name="_username" value="{{ last_username }}" /> 

    <label for="password">Password:</label> 
    <input type="password" id="password" name="_password" /> 

    <input type="hidden" name="_target_path" value="account" /> 

    <input type="submit" name="login" /> 
</form> 
+0

На данный момент я выводил значение $ request-> getSession() -> get ('_security.main.target_path') на страницу входа. Если я использую перенаправление вручную, значение отсутствует. Если брандмауэр перенаправляет меня, значение есть. Будет ли то, что вы предлагаете, сохранить это? например будет ли она в той или иной форме, помните, где она была? (Это то, что делают ваши изменения form_login?) – Adi

0

Я думаю, что вы «просто» можете бросить Symfony\Component\Security\Core\Exception\AuthenticationException. Symfony\Component\Security\Http\Firewall\ExceptionListener будет обрабатывать его и перенаправлять на точку входа брандмауэра с помощью набора _security.main.target_path.

+0

Я проверю это. Мне нравится эта идея. – Adi

+0

Это будет работать, потому что это то, что делается компонентом secutrity при сбое аутентификации (https://github.com/symfony/symfony/blob/582f4753a343f230fbe18b4e9a0747d48351ddfb/src/Symfony/Component/Security/Core/Authentication/AuthenticationManagerInterface. php # L32) –

+0

@YassineGuedidi работает над перенаправлением на логин, но не перенаправляет обратно на target_path – Basit

Смежные вопросы