always_use_default_target_path 设置为 false 时不起作用
always_use_default_target_path doesn't work when set on false
我已经在 Symfony 2.7 中安装了 fos user bundle
。
一切正常,但我在重定向时遇到问题。它总是将我重定向到家:localhost/xxx/app_dev.php/
。我的 security.yml
#security.yml
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
always_use_default_target_path: false
default_target_path: /
target_path_parameter: _target_path
use_referer: false
logout: true
anonymous: true
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
有什么问题可以住?
检查您的登录表单,它包含哪些输入字段?
在您添加的配置中:
target_path_parameter: _target_path
这将使用登录表单中的 _target_path 隐藏输入字段来确定登录后将用户重定向到何处。 (我想这是一个空字符串或默认为 /)
取消注释此行并试一试。
问候 Andras Laczi 的回答,我添加了我自己的灵活解决方案(可能存在更好的解决方案)
第一步:我添加到 security.yml 以下行:
firewalls:
main:
form_login:
...
failure_path_parameter: _failure_path
第二步:在 twig 中,在我想要生成重定向到登录的地方,我添加了
<a href="{{ path('fos_user_security_login')}}?targetPath={{ app.request.attributes.get('_route') }}">Log in</a>
第三步:重写 FOSUserBundle SecurityController,并在 LoginAction 的某处添加以下行
$targetPath = $request->query->get('targetPath', 'app_index');
$failurePath = $targetPath;
第四步:覆盖 FOSUserBundle 登录表单添加以下隐藏字段:
<input type="hidden" name="_target_path" value="{{ targetPath }}" />
<input type="hidden" name="_failure_path" value="/login?targetPath={{ failurePath }}" />
我已经在 Symfony 2.7 中安装了 fos user bundle
。
一切正常,但我在重定向时遇到问题。它总是将我重定向到家:localhost/xxx/app_dev.php/
。我的 security.yml
#security.yml
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
always_use_default_target_path: false
default_target_path: /
target_path_parameter: _target_path
use_referer: false
logout: true
anonymous: true
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
有什么问题可以住?
检查您的登录表单,它包含哪些输入字段?
在您添加的配置中:
target_path_parameter: _target_path
这将使用登录表单中的 _target_path 隐藏输入字段来确定登录后将用户重定向到何处。 (我想这是一个空字符串或默认为 /)
取消注释此行并试一试。
问候 Andras Laczi 的回答,我添加了我自己的灵活解决方案(可能存在更好的解决方案)
第一步:我添加到 security.yml 以下行:
firewalls:
main:
form_login:
...
failure_path_parameter: _failure_path
第二步:在 twig 中,在我想要生成重定向到登录的地方,我添加了
<a href="{{ path('fos_user_security_login')}}?targetPath={{ app.request.attributes.get('_route') }}">Log in</a>
第三步:重写 FOSUserBundle SecurityController,并在 LoginAction 的某处添加以下行
$targetPath = $request->query->get('targetPath', 'app_index');
$failurePath = $targetPath;
第四步:覆盖 FOSUserBundle 登录表单添加以下隐藏字段:
<input type="hidden" name="_target_path" value="{{ targetPath }}" />
<input type="hidden" name="_failure_path" value="/login?targetPath={{ failurePath }}" />