我有一个调用我们的 API 的函数,称为executeGetRequest(具有其他 HTTP 方法的变体)。它是静态的并且位于基类中。它是从控制器调用的。如果 API 返回 401 HTTP 状态代码,executeGetRequest 应将用户重定向到“前端”Yii2 项目上的注销页面,以清除过期的会话数据。
我和我的同事尝试了多种不同的重定向方法。$this->redirect() 将不起作用,因为静态上下文中没有 $this 对象。
return Yii::$app->getResponse()->redirect(Url::to('login/user-logout'));
Run Code Online (Sandbox Code Playgroud)
不起作用。
Yii::$app->getResponse()->redirect(Url::to('login/user-logout'))->send();
return;
Run Code Online (Sandbox Code Playgroud)
不起作用。我们在使用和不使用 Url::to() 的情况下尝试了这些。
我能够在检查 401 响应的条件中获得 Yii::trace() 。效果很好。所以问题不在于401状态码的检测,而在于重定向。
这应该有效
Yii::$app->response->redirect(['login/user-logout'])->send(); return;
Run Code Online (Sandbox Code Playgroud)
它在您的情况下不起作用的可能原因:
logout。401意味着它可能是#3。尝试相同的重定向机制,但指向其他路由和/或删除POST 操作verb的行为user-logout来验证它。