Slim php,停止,在小型中间件中发送403响应状态代码后死亡

时间:2014-06-18 11:22:05

标签: php slim

我为slim php框架创建了一个小型中间件函数,用于检查用户是否经过身份验证,就像这样。

function authenticate($app) {
    return function() use ($app) {
        if (!isset($_SESSION['user'])) {
            $response = array();
            array_push($response, array(
                    'error' => true,
                    'message' => 'You are not logged in.'
                )
            );
            echoRes(403, $response);
        }
    };
}

如果我尝试将其插入这样的路线中,会发生什么:

$app->get('/', authenticate($app), function() use ($app){
     echoRes(200, 'hello world!');
});

echoRes功能

function echoRes($code, $response) {
    $app = \Slim\Slim::getInstance();
    $app->status($code);
    $app->contentType('application/json');
    echo json_encode($response);
}

即使我未经过身份验证,即使我使用200杀了它,它仍将继续为我提供die()的状态代码;

function authenticate($app) {
    return function() use ($app) {
        if (!isset($_SESSION['user'])) {
            $response = array();
            array_push($response, array(
                    'error' => true,
                    'message' => 'You are not logged in.'
                )
            );
            echoRes(403, $response);
            die();
        }
    };
}

3 个答案:

答案 0 :(得分:4)

我使用$ app-> notfound()或$ app-> halt(403)来暂停执行。无需设置由这些功能设置的状态代码。

答案 1 :(得分:0)

如果您正在使用2.2.0版(我不确定是否适用于更高版本)并且还必须在设置403响应状态后添加JSON响应,那么您可能使用$app->stop()。使用$app->halt(arg)删除正文内容。

答案 2 :(得分:0)

在Slim 3.0中,halt()和stop()不再存在。 参考:http://www.slimframework.com/docs/v3/start/upgrade.html#removal-of-stophalt

您需要使用-> withJson():

return $response->withJson([
  'error' => true,
  'message' => 'You are not logged in.'
], 403);