2017-02-11 3 views
1

folgenden Setup:Verwenden Sie verschiedene Anmeldeformulare in Symfony 3

Ich habe zwei verschiedene Login-Abschnitte für zwei verschiedene Benutzer.

Der erste Benutzer ist ein normaler Benutzer (Entität: AppBundle: Benutzer) der zweite ist der Administrator (Entität: AppBundle: Admin).

Ich habe zwei verschiedene Login-Pfade, Provider, Firewalls und Encoder. Ich kann mich als Benutzer oder als Administrator ohne Probleme einloggen und abmelden.

Das Problem:

Wenn der Administrator in ich ihn in der Admin-Domäne bleiben muß angemeldet hat und nicht in der Lage sein, die Benutzer-Login zuzugreifen. Dasselbe gilt für den normalen Benutzer. Er darf sich nicht als Administrator anmelden können, wenn er bereits als Benutzer angemeldet ist.

Das Problem ist also, dass, wenn der Admin eingeloggt ist, er immer noch auf die Benutzer-Login-Domain wechseln und sich als Benutzer einloggen kann, dann enthält die Session sowohl USER UND ADMIN.

security.yml:

providers: 
    admin_db_provider: 
     name: admin_provider 
     entity: 
      class: AppBundle:Admin 
     ... 
    user_db_provider: 
     name: user_provider 
     entity: 
      class: AppBundle:User 
     ... 
firewalls: 
    admin_secured_domain: 
     pattern: ^/admin 
     anonymous: ~ 
     provider: admin_provider 
     form_login: 
      login_path: admin.authentication 
      check_path: admin.authentication 
      username_parameter: userName 
      pasword_parameter: password 
     ... 
    user_secured_domain: 
     pattern: ^/user 
     anonymous: ~ 
     provider: user_provider 
     form_login: 
      login_path: user.authentication 
      check_path: user.authentication 
      username_parameter: userName 
      pasword_parameter: password 
     ... 
access_control: 
    - { path: ^/user/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
encoders: 
    ... 

Ich nehme an, dies geschieht, weil ich zwei verschiedene Anbieter für die Prüfung Login verwenden.

Wenn ich als Benutzer angemeldet bin und auf die Admin-Anmeldung zugreifen, kann ich im Symfony Profiler sehen, dass der Benutzer von "Benutzer" zu "Anon." und dasselbe gilt für den admin, es wechselt von "admin" zu "anon". wenn ich als Admin angemeldet bin und auf die Benutzeranmeldung zugreife.

Ich muss sie nur zurück zu ihrer Domäne umleiten, aber ich bin nicht in der Lage, die Rolle an diesem Punkt zu überprüfen.

Antwort

1

Was Sie suchen, ist der "Sicherheitskontext".

Sehen Sie diese ähnliche Frage unten: Session lost during impersonation

Wenn Sie Ihre Benutzer aus verschiedenen Firewalls wollen den gleichen Sicherheitskontext teilen, dann müssen Sie den gleichen Kontext für die verschiedenen Firewalls definieren:

# app/config/security.yml 
security: 
    # ... 
    firewalls: 
     admin_secured_domain: 
      # ... 
      context: my_context 
     user_secured_domain: 
      # ... 
      context: my_context 

siehe die symfony-Dokumentation über den Sicherheitskontext: http://symfony.com/doc/current/reference/configuration/security.html#reference-security-firewall-context

Die meisten Anwendungen benötigen nur eine Firewall. Wenn Ihre Anwendung jedoch mehrere Firewalls verwendet, werden Sie feststellen, dass Sie bei einer Authentifizierung in einer Firewall nicht automatisch in einer anderen authentifiziert werden. Mit anderen Worten, die Systeme teilen keinen gemeinsamen "Kontext": Jede Firewall agiert wie ein separates Sicherheitssystem.

Verwandte Themen