2016-07-12 50 views
0

Es ist wirklich, was die Überschrift besagt - ich kann nicht herausfinden, warum Benutzerumschaltung nicht funktioniert. In meinem security.yml ich habe:Symfony FOS-Benutzerpaket - Benutzer wechseln fehlgeschlagen: "Benutzername" * "existiert nicht."

firewalls: 
    # disables authentication for assets and the profiler, adapt it according to your needs 
    dev: 
     pattern: ^/(_(profiler|wdt)|css|images|js)/ 
     security: false 

    main: 
     pattern: ^/ 
     form_login: 
      provider:      fos_userbundle     # using FOSUserBundle for user authentication 
      check_path:      fos_user_security_check 
      login_path:      fos_user_security_login 
      csrf_token_generator:   security.csrf.token_manager  # CSRF token - can be changed? 
      default_target_path:   default_logged_in_target  # default route to go to after login 
#    default_target_path:   fos_user_profile_show 
      always_use_default_target_path: true       # ignore the requested url and allways go to default route after login 
     logout: 
       path:       fos_user_security_logout 
       target:      default_loged_out_target 

     logout:  true 
     anonymous: true 
     switch_user: true 

Aufruf die URL

[ProjectPath]/account?_switch_user=testuser 

Ergebnisse in dem Fehler

Switch User failed: "Username "testuser" does not exist." 

"Testuser" jedoch ein absolut gültiger Benutzer ist, und ich kann lüge in der Regel mit diesem Benutzer beim Einloggen auf die Standard-Weise. Der Benutzer, mit dem ich mich beim Aufrufen der URL mit "_switch_user" angemeldet habe, hat die Rolle "ROLE_ALLOWED_TO_SWITCH" - dies scheint jedoch nicht das Problem zu sein. Ich stecke hier fest. Alle Hinweise werden sehr geschätzt.

EDIT:

Die Stacktrace zeigt, dass in "SwitchUserListener.php" den Aufruf von

$this->tokenStorage->setToken($this->attemptSwitchUser($request)); 

ausfällt und gefangen wird, in der gegebenen Fehler führt.

Antwort

2

Ich konnte es die fos_userbundle Benutzer-Provider zu arbeiten Hinzufügen so security.yml:

firewalls: 
.. 
    main: 
     ... 
     switch_user: 
      provider: fos_userbundle 
+0

hatte ich ein ähnliches Problem und Ihr Hinweis hat mir geholfen, es zu lösen. Ich hatte einen leeren in_memory-Anbieter (zum Testen) und einen anderen. Habe gerade den in_memory-Provider entfernt und es hat funktioniert. Sieht so aus, als ob der erste Provider standardmäßig den Benutzer holt ... –