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 }}" />