小编mk_*_*der的帖子

Slim 4 中的路由中间件不会停止调用路由中的可调用对象

我正在与 Slim4 中的授权中间件苦苦挣扎。这是我的代码:

$app = AppFactory::create();
$app->add(new Authentication());

$app->group('/providers', function(RouteCollectorProxy $group){
    $group->get('/', 'Project\Controller\ProviderController:get');
})->add(new SuperuserAuthorization());
Run Code Online (Sandbox Code Playgroud)

身份验证中间件检查用户并正常工作。

ProviderController 中的get方法是

public function get(Request $request, Response $response): Response{
    $payload = [];
    foreach(Provider::all() as $provider){
        $payload[] = [
            'id' => $provider->id,
            'name' => $provider->name,
        ];
    }
    $response->getBody()->write(json_encode($payload));
    return $response;
}
Run Code Online (Sandbox Code Playgroud)

SuperuserAuthorization 看起来像这样

class SuperuserAuthorization{
    public function __invoke(Request $request, RequestHandler $handler): Response{
        $response = $handler->handle($request);
        $authorization = explode(" ", $request->getHeader('Authorization')[0]);
        $user = User::getUserByApiKey($authorization[1]);
        if(! Role::isSuperuser($user)){
            return $response->withStatus(403);//Forbidden
        }
        return $response;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是即使用户不是超级用户,应用程序也会继续执行。结果我得到了所有提供者的 …

php middleware routes slim-4

8
推荐指数
1
解决办法
2135
查看次数

标签 统计

middleware ×1

php ×1

routes ×1

slim-4 ×1