我为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();
}
};
}
答案 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);