2017-11-20 2 views
0

Ich versuche, Benutzer programmgesteuert in Drupal 8 anmelden. Hier geht mein Code.Programmatisch Benutzeranmeldung funktioniert nicht in Drupal 8

if(isset($uid)) { 
     $user = User::load($uid); 
     user_login_finalize($user); 
     $user_destination = \Drupal::destination()->get(); 
     $response = new RedirectResponse($user_destination); 
     $response->send(); 
     exit(0); 
    } 

Ich bekomme die Nachricht "Sitzung geöffnet für ..." in Watchdog. Aber der Benutzer ist nicht eingeloggt. Kann mir jemand sagen, was mit meinem Code nicht stimmt?

Antwort

1

Die Verwendung von exit() im Controller ist keine gute Idee. Drupal erzeugt nach dem Ausführen des Controllers viele weitere Aktionen, aber exit() stoppt das Skript, bevor sie ausgeführt werden. Um dies zu vermeiden, müssen Sie RedirectResponce() von Ihrem Controller zurückgeben:

if(isset($uid)) { 
    $user = User::load($uid); 
    user_login_finalize($user); 
    $user_destination = \Drupal::destination()->get(); 
    $response = new RedirectResponse($user_destination); 
    return $response 
}