2016-08-08 10 views
0

Ich habe eine Funktion, die unsere API namens executeGetRequest aufruft (mit Varianten für andere HTTP-Methoden). Es ist statisch und befindet sich in einer Basisklasse. Es wird von Controllern aufgerufen. Wenn die API einen 401-HTTP-Statuscode zurückgibt, sollte executeGetRequest den Benutzer auf die Abmeldeseite im "Frontend" -Yii2-Projekt umleiten, um die veralteten Sitzungsdaten zu löschen.Yii2: Führe eine Umleitung aus dem statischen Nicht-Controller-Kontext aus

Mein Kollege und ich haben mehrere verschiedene Möglichkeiten zum Redirect ausprobiert. $ this-> redirect() wird nicht funktionieren, weil $ kein Objekt aus einem statischen Kontext ist.

return Yii::$app->getResponse()->redirect(Url::to('login/user-logout')); 

funktioniert nicht.

Yii::$app->getResponse()->redirect(Url::to('login/user-logout'))->send(); 
return; 

funktioniert nicht. Wir haben diese mit und ohne Url :: to() ausprobiert.

Ich konnte eine Yii :: trace() in der Bedingung, die für die 401-Antwort überprüft. Es funktioniert gut. Das Problem ist also nicht die Erkennung von 401 Statuscodes, sondern die Umleitung.

Antwort

1

Diese sollte Arbeit

Yii::$app->response->redirect(['login/user-logout'])->send(); return; 

Mögliche Ursachen, warum es nicht in Ihrem Fall arbeiten:

  1. Das war Ajax/pjax Anfrage.
  2. Sie haben redundante URL :: to() mit falscher Route verwendet.
  3. Sie erwarten eine POST-Anfrage, was häufig bei logout Aktionen der Fall ist.

401 bedeutet, es ist wahrscheinlich # 3. Versuchen Sie den gleichen Umleitungsmechanismus, aber zeigen Sie auf andere Route und/oder entfernen Sie das verb Verhalten für user-logout POST-Aktion, um es zu überprüfen.

Verwandte Themen