【发布时间】:2019-03-27 16:19:13
【问题描述】:
TD;LR:我试图掌握中间件实现背后的想法。它似乎正在工作,但我该如何正确处理响应,以便它向浏览器显示基本授权登录提示?
--
我正在使用:
- equip/dispatch 用于 PSR-15 中间件调度器
- guzzlehttp/psr7 对于 PSR-7 ServerRequestInterface
- middlewares/http-authentication 示例基本授权中间件
- middlewares/response-time 额外的虚拟中间件(检查是否也在管道中执行)
运行以下代码:
$middleware = [
new \Middlewares\ResponseTime(),
(new \Middlewares\BasicAuthentication([
'username1' => 'password1',
'username2' => 'password2'
]))->attribute('username')
];
// Default handler for end of collection
$default = function (\GuzzleHttp\Psr7\ServerRequest $request) {
// Any implementation of PSR-7 ResponseInterface
return new \GuzzleHttp\Psr7\Response();
};
$collection = new \Equip\Dispatch\MiddlewareCollection($middleware);
// Any implementation of PSR-7 ServerRequestInterface
$request = \GuzzleHttp\Psr7\ServerRequest::fromGlobals();
$response = $collection->dispatch($request, $default);
print_r($response);
返回以下内容:
GuzzleHttp\Psr7\Response Object
(
[reasonPhrase:GuzzleHttp\Psr7\Response:private] => Unauthorized
[statusCode:GuzzleHttp\Psr7\Response:private] => 401
[headers:GuzzleHttp\Psr7\Response:private] => Array
(
[WWW-Authenticate] => Array
(
[0] => Basic realm="Login"
)
[X-Response-Time] => Array
(
[0] => 16.176ms
)
)
[headerNames:GuzzleHttp\Psr7\Response:private] => Array
(
[www-authenticate] => WWW-Authenticate
[x-response-time] => X-Response-Time
)
[protocol:GuzzleHttp\Psr7\Response:private] => 1.1
[stream:GuzzleHttp\Psr7\Response:private] =>
)
看来middlewares/response-time 和middlewares/http-authentication 执行得很好。但是,我的印象是middlewares/http-authentication 会显示如下的实际登录提示:
但它没有。我想自己实现吗?如果是,我该如何正确地做到这一点?
【问题讨论】:
标签: php architecture middleware