CodeIgniter 4过滤器-退出并响应

问题描述

我有一个使用CodeIgniter 4的项目。

我有一个before过滤器:

public function before(RequestInterface $request){

    $auth = $request->getHeader("Authorization");
    if($auth == null){

        $response = Services::response();
        $response->setStatusCode(401);
        $response->setHeader("WWW-Authenticate","Bearer Token");
        $response->setBody("{\"error\": \"unauthorized\"}");

        exit;

    }

}

如果没有授权,我想停止请求并将$response返回给客户端。

由于exit,目前请求已停止。

但是作为答案,我得到了200 OK而没有body content

我如何exit将该请求$response设置为客户端?

解决方法

如注释中所述,在Filter的before方法中返回Response对象将阻止控制器的执行。您不需要使用dieexit

public function before(RequestInterface $request){

    $auth = $request->getHeader("Authorization");
    if($auth == null){

        $response = Services::response();
        $response->setStatusCode(401);
        $response->setHeader("WWW-Authenticate","Bearer Token");
        $response->setBody("{\"error\": \"unauthorized\"}");

        return $response;

    }

}

请注意,使用return;不返回任何内容不会阻止控制器运行。

,

使用 sendBody 方法打印响应内容。

public function before(RequestInterface $request){

    $auth = $request->getHeader("Authorization");
    if($auth == null){

        $response = Services::response();
        $response->setStatusCode(401);
        $response->setHeader("WWW-Authenticate","Bearer Token");
        $response->setBody("{\"error\": \"unauthorized\"}");
        $response->sendBody();

        exit;

    }

}
,

$response在before方法中不可用: 因此,我在before方法中执行了以下操作,以发送响应并停止执行:

      header('HTTP/1.1 401 Unauthorized',true,401);
      die(json_encode(['error' => 'Unauthorized']));

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...