Return 来自 Slim 3 中间件的自定义对象

Return custom object from Slim 3 middleware

我正在用 Slim 3 编写一个 API 与遗留系统集成。客户端在查询字符串中向我的 API 发送一个令牌。我想编写一个中间件来验证令牌和 return 一个包含遗留系统使用的必要内部登录凭据(不同于令牌)的对象。

我现在可以验证令牌,但我的问题是 Slim 3 要求中间件 return 一个 \Psr\Http\Message\ResponseInterface 实例。我还希望它 return 将自定义对象返回给应用程序。

我想我可以通过在中间件之外重新验证令牌来实现这一点,并且只使用中间件作为验证令牌的方式,如果失败则 return 报错。我倾向于认为可以避免这种笨拙的方式,所以我只需要在中间件中使用一次令牌并同时 return 自定义对象,这样我就不必两次使用令牌了。

我四处寻找解决方案,但我能找到的所有示例中间件都类似于 https://github.com/julionc/slim-basic-auth-middleware, where they are simply authenticating in the middleware but do not have the requirement to return a custom object. The documentation at http://www.slimframework.com/docs/concepts/middleware.html 似乎对这个自定义要求也没有多大帮助。

有什么想法吗?

您可以在您的中间件中包含一个回调,您可以使用它来将自定义对象存储在某处。例如,对于 slim-jwt-auth,您可以使用回调来使用回调存储 JWT 的解码内容。

$app->add(new \Slim\Middleware\JwtAuthentication([
    "secret" => "supersecretkeyyoushouldnotcommittogithub",
    "callback" => function ($request, $response, $arguments) use ($app) {
        $app->jwt = $arguments["decoded"];
    }
]));

请注意,这种回调不是 Slim 3 的功能。正是这个中间件恰好使用的东西。