snicco/signed-url-psr15-bridge

snicco/signed-url 的 Psr15 中间件集成

v2.0.0-beta.9 2024-09-07 14:27 UTC

README

codecov Psalm Type-Coverage Psalm level PhpMetrics - Static Analysis

此包包含两个简单的中间件,将使使用 snicco/signed-url 变得轻松。请确保阅读一般的 文档,以了解如何实例化所需的协作者。

安装

composer require snicco/signed-url-psr15-bridge

使用

确保您喜欢的框架支持在路由级别绑定中间件。此中间件应仅添加到您期望有签名 URL 的路由中,而不是全局添加。

基本使用

$storage = /* */
$hmac = /* */

$validator = new \Snicco\Component\SignedUrl\SignedUrlValidator($storage, $hmac);

$middleware = new \Snicco\Bridge\SignedUrlPsr15\ValidateSignature(
    $validator,
);
/* Attach $middleware to your route */

自定义额外的请求上下文。

作为第二个参数,您可以传递一个闭包,该闭包将接收当前请求。从该闭包返回的任何内容都将被考虑在内,以验证当前请求。

这必须与创建链接时使用的请求上下文相匹配!
在创建时使用 IP 地址和在验证时使用用户代理将不起作用,请求将始终被验证失败。

// Same as above.
$validator = /* */
$middleware = new \Snicco\Bridge\SignedUrlPsr15\ValidateSignature(
    $validator,
    function(\Psr\Http\Message\RequestInterface $request) {
        return $request->getHeaderLine('User-Agent');
    }
);

/* Attach $middleware to your route */

仅验证不安全 HTTP 方法

如果签名 URL 应该恰好使用一次(用于 GET 请求),您可能会遇到某些电子邮件客户端预加载所有链接的问题。在这种情况下,您可以设置中间件的第三个参数为 (bool) true。然后,只有当请求方法是 [POST, PATCH, PUT, DELETE] 之一时,才会检查签名。 确保您使用此选项时路由不可通过安全请求方法访问。

垃圾回收

CollectGarbage 中间件添加到您的全局中间件组中。

// same as above
$storage = /* */
$psr3_logger = /* */

// value between 0-100
// the percentage that one request through the middleware
// will trigger garbage collection.
$percentage = 4;

$middleware = new \Snicco\Bridge\SignedUrlPsr15\CollectGarbage($percentage, $storage, $logger);

/* Attach $middleware to your route */