2016-03-23 13 views
1

Ich habe fos user bundle in Symfony 2.7 installiert.always_use_default_target_path funktioniert nicht, wenn auf false gesetzt

Alles funktioniert gut, aber ich habe Probleme mit der Umleitung. Es leitet mich immer nach Hause um: localhost/xxx/app_dev.php/. Mein 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 } 

Welches Problem kann leben?

Antwort

1

Überprüfen Sie Ihr Login-Formular, welche Eingabefelder enthält es?

In der Konfiguration, die Sie hinzugefügt:

  target_path_parameter:   _target_path 

Das das _target_path versteckte Eingabefeld in Ihrem Login-Formular zu bestimmen, wo verwenden die Benutzer nach dem Login zu umleiten. (Ich nehme an, das ist eine leere Zeichenfolge oder standardmäßig die /)

Kommentieren Sie diese Zeile und versuchen Sie es.

0

Grüße an Andras Laczi Antwort Ich habe meine eigene flexible Lösung (wahrscheinlich besser ein exist)

Schritt ONE gemacht: Ich habe folgende Zeile security.yml:

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

Zweiter Schritt: Im Zweig an Orten, wo ich will Umleitung erzeugen i

<a href="{{ path('fos_user_security_login')}}?targetPath={{ app.request.attributes.get('_route') }}">Log in</a> 

Schritt drei einzuloggen hinzugefügt: Übergeordnete FOSUserBundle SecurityController und das Hinzufügen von folgenden Zeilen irgendwo in Loginaction

$targetPath = $request->query->get('targetPath', 'app_index'); 
$failurePath = $targetPath; 

Vierter Schritt: Übergeordnete FOSUserBundle Login Form Hinzufügen folgende versteckte Felder:

<input type="hidden" name="_target_path" value="{{ targetPath }}" /> 
<input type="hidden" name="_failure_path" value="/login?targetPath={{ failurePath }}" /> 
Verwandte Themen