2016-03-23 95 views
1

我在Symfony 2.7中安装了fos user bundle设置为false时always_use_default_target_path不起作用

一切工作正常,但我有问题重定向。它总是将我重定向到家: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 } 

什么问题可以生存?

回答

1

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

在配置方面,你又说:

  target_path_parameter:   _target_path 

这将使用_target_path隐藏的输入字段在你的登录表单,以确定登录之后将用户重定向。 (我想这是一个空字符串或默认为/)

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

0

问候安德拉斯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 }}" /> 
相关问题