2016-08-08 6 views
0

私は、私たちのAPIを呼び出すexecuteGetRequestという関数を持っています(他のHTTPメソッドのバリアントあり)。これは静的であり、基本クラスに配置されています。これはコントローラから呼び出されます。 APIが401のHTTPステータスコードを返す場合、executeGetRequestは古いセッションデータを消去するために、ユーザーを "フロントエンド" Yii2プロジェクトのログアウトページにリダイレクトする必要があります。Yii2:コントローラー以外の静的コンテキストからリダイレクトを実行

私の同僚と私は、リダイレクトに複数の方法を試みました。 $ this-> redirect()は静的コンテキストの$ thisオブジェクトが存在しないため動作しません。

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

は機能しません。

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

は機能しません。 Url :: to()の有無にかかわらずこれらを試しました。

私は401応答をチェックした条件でYii :: trace()を得ることができました。それはうまく動作します。したがって、問題は401ステータスコードの検出ではなく、リダイレクトです。それはあなたのケースで働いていない理由を

答えて

1

このはず仕事

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

考えられる原因:

  1. これは、AJAX/pjax要求しました。
  2. 間違ったルートで冗長なUrl :: to()を使用しました。
  3. 多くの場合、logoutアクションではPOSTリクエストが必要です。

401はおそらく3番です。同じリダイレクトメカニズムを試してみて、他のルートを指し示してください。user-logout POSTアクションを確認してverbの動作を削除してください。

関連する問題