CakePHP:重定向到从自定义组件登录

CakePHP:重定向到从自定义组件登录,cakephp,cakephp-3.0,Cakephp,Cakephp 3.0,在自定义组件中,我正在进行API调用。如果API调用返回403,我想注销用户并重定向到登录。使用下面的代码,我得到一个响应对象,而不知道响应是重定向还是包含请求的数据。除了get之外,我还在组件中实现了其他方法,因此我在最后调用RestapComponent的次数超过了50次 调用RestAPIComponent public function view($id) { $resource = $this->__getSingularResourceName(); $$re

在自定义组件中,我正在进行API调用。如果API调用返回403,我想注销用户并重定向到登录。使用下面的代码,我得到一个响应对象,而不知道响应是重定向还是包含请求的数据。除了get之外,我还在组件中实现了其他方法,因此我在最后调用RestapComponent的次数超过了50次

调用RestAPIComponent

public function view($id) 
{
    $resource = $this->__getSingularResourceName();
    $$resource = $this->RestApi->get($id)->json;
    $this->set(compact($resource));
}
public function get($id = null, array $query = [], $action = null)
{
    $path = (is_null($id) === false) ? $id : '';
    $response = $this->_http->get($path . '/' . $action, $query, $this->_getAuthHeader());
    return $this->_handleResponse($response);
}

private function _handleResponse(Response $response)
{
    if ($response->statusCode() == 403) {
        $this->Cookie->delete(TOKEN);
        $this->Cookie->delete(USER);
        $controller = $this->_registry->getController();
        return $controller->redirect($controller->Auth->logout());
    } else {
        return $response;
    }
}
餐厅组件

public function view($id) 
{
    $resource = $this->__getSingularResourceName();
    $$resource = $this->RestApi->get($id)->json;
    $this->set(compact($resource));
}
public function get($id = null, array $query = [], $action = null)
{
    $path = (is_null($id) === false) ? $id : '';
    $response = $this->_http->get($path . '/' . $action, $query, $this->_getAuthHeader());
    return $this->_handleResponse($response);
}

private function _handleResponse(Response $response)
{
    if ($response->statusCode() == 403) {
        $this->Cookie->delete(TOKEN);
        $this->Cookie->delete(USER);
        $controller = $this->_registry->getController();
        return $controller->redirect($controller->Auth->logout());
    } else {
        return $response;
    }
}

可能有以下原因,使用auth组件获取403错误-- 1.可以通过代码获取403。从CakePHP文档()中可以看到这一点:如果authenticator返回null,AuthComponent将用户重定向到登录操作。如果是ajax请求,并且指定了AuthComponent::$ajaxLogin,则呈现该元素,否则返回403 http状态代码

2.多个Ajax调用不应该是403错误的原因。 3.标准路由由CakePHP自己处理。如果您需要一些不同的路由,您应该在routes.php中配置它。我认为使用.htaccess只是为了满足极端的路由需求,应该是最后的选择

4.是的,这可能是一个原因,因为您将不再登录,因此获得认证403s


要了解更多详细信息,您可以访问链接

查看确切的内容、地点和原因?你真的需要添加更多的信息,最重要的部分,实际的问题,是缺乏任何细节。我的更改是如何清楚。对不起,基本部分仍然丢失。这里重要的是您实际处理返回响应的位置,如果不知道在该上下文中到底发生了什么,以及为什么测试响应类型会有问题,就不可能给您任何适当的建议。您是否要在web服务调用中使用此组件?是的$此->\u http->get是对HttpClient的调用。AuthComponent不返回403。使用HTTPClient发出请求将返回403,因为我正在使用的令牌不再有效。请检查您的应用程序控制器。在您的案例中,可能会继承一些与Auth组件相关的设置@Raman此时似乎是正确的。