【问题标题】:always_use_default_target_path doesn't work when set on false设置为 false 时,always_use_default_target_path 不起作用
【发布时间】:2016-07-10 16:34:55
【问题描述】:

我在 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 }

什么问题可以解决?

【问题讨论】:

    标签: php symfony security fosuserbundle


    【解决方案1】:

    关于 Andras Laczi 的回答,我添加了我自己的灵活解决方案(可能存在更好的解决方案)

    第一步:我在 security.yml 中添加了以下行:

    firewalls:
        main:
             form_login:
                ...               
                failure_path_parameter: _failure_path
    

    第二步:在树枝中,在我想要生成重定向到登录的地方我添加了

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

    【讨论】:

      【解决方案2】:

      检查您的登录表单,它包含哪些输入字段?

      在你添加的配置中:

                  target_path_parameter:          _target_path
      

      这将使用登录表单中的 _target_path 隐藏输入字段来确定登录后将用户重定向到哪里。 (我想这是一个空字符串或默认为 /)

      取消注释此行并尝试一下。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-01-04
        • 2013-04-23
        • 2013-04-22
        • 2017-05-13
        • 1970-01-01
        • 1970-01-01
        • 2015-12-21
        相关资源
        最近更新 更多