spatie / laravel-url-signer
Laravel 实现的 spatie/signed-url
Requires
- php: ^8.1
- illuminate/console: ^10.10.0|^11.0
- illuminate/support: ^10.0|^11.0
- spatie/laravel-package-tools: ^1.13.6
- spatie/url-signer: ^2.0
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0
- pestphp/pest: ^1.22.2|^1.22|^2.34
README
此包可以创建有限生命周期的 URL。这是通过在 URL 中添加到期日期和签名来完成的。
与 Laravel 的原生路由签名 的区别在于,使用此包
- 您可以在不同的应用程序之间轻松地使用签名 URL
- 使用的签名密钥与应用程序密钥无关
- 您可以轻松地为任何 URL 签名(而不仅仅是应用程序的路由)
这是创建有效期为 30 天的签名 URL 的方法
use Spatie\UrlSigner\Laravel\Facades\UrlSigner; UrlSigner::sign('https://myapp.com/protected-route', now()->addDays(30));
输出将如下所示
https://app.com/protected-route?expires=xxxxxx&signature=xxxxxx
可以使用 validate
函数验证此 URL。
// returns `true` if the signed URL is valid, `false` if not UrlSigner::validate('https://app.com/protected-route?expires=xxxxxx&signature=xxxxxx');
该包还提供了一种 中间件来保护路由。
支持我们
我们投入了大量资源来创建 一流的开源包。您可以通过 购买我们的付费产品之一 来支持我们。
我们非常感谢您从家乡寄来明信片,说明您正在使用我们的哪个包。您可以在 我们的联系页面 找到我们的地址。我们将在 我们的虚拟明信片墙上 发布所有收到的明信片。
安装
如您所料,该包可以通过 composer 安装
composer require spatie/laravel-url-signer
您必须设置一个名为 URL_SIGNER_SIGNATURE_KEY
的环境变量,并将其设置为长密钥值。此值将用于签名和验证签名 URL。
php artisan generate:url-signer-signature-key
{--s|show : Display the key instead of modifying files.}
{--always-no : Skip generating key if it already exists.}
{--f|force : Skip confirmation when overwriting an existing key.}
配置文件可以可选地通过以下方式发布
php artisan vendor:publish --tag="url-signer-config"
这是文件的内容
return [ /* * This string is used the to generate a signature. You should * keep this value secret. */ 'signature_key' => env('URL_SIGNER_SIGNATURE_KEY'), /* * The default expiration time of a URL in seconds. */ 'default_expiration_time_in_seconds' => 60 * 60 * 24, /* * These strings are used a parameter names in a signed url. */ 'parameters' => [ 'expires' => 'expires', 'signature' => 'signature', ], ];
用法
可以使用 sign
方法为 URL 签名
use Spatie\UrlSigner\Laravel\Facades\UrlSigner; UrlSigner::sign('https://myapp.com/protected-route');
默认情况下,URL 的有效期为一整天。此值可以在配置文件中更改。如果您想要自定义有效期,可以指定 URL 应该有效的天数
use Spatie\UrlSigner\Laravel\Facades\UrlSigner; // the generated URL will be valid for 5 minutes. UrlSigner::sign('https://myapp.com/protected-route', now()->addMinutes(5)); // alternatively you could also pass the amount of seconds UrlSigner::sign('https://myapp.com/protected-route', 60 * 5);
验证 URL
要验证签名 URL,只需调用 validate()
方法。此方法返回一个布尔值。
use Spatie\UrlSigner\Laravel\Facades\UrlSigner; UrlSigner::validate('https://app.com/protected-route?expires=xxxxxx&signature=xxxxxx');
使用中间件保护路由
该包提供了一个中间件来保护路由。
要使用它,您必须首先将 Spatie\UrlSigner\Laravel\Middleware\ValidateSignature
注册为 HTTP 核心中的路由中间件。
// in app/Http/Kernel.php protected $routeMiddleware = [ // ... 'signed-url' => \Spatie\UrlSigner\Laravel\Middleware\ValidateSignature::class, ];
然后,您可以在任何您想要的路径上应用它。
Route::get('protected-route', fn () => 'Hello secret world!') ->middleware('signed-url');
如果路由没有有效的签名,则应用程序将终止并返回 403 状态码。
变更日志
请参阅 CHANGELOG 了解最近更改的详细信息。
测试
您可以使用此命令运行测试
composer test
在 Laravel 之外使用
如果您正在处理非 Laravel 项目,则可以使用 无框架版本。
贡献
请参阅 CONTRIBUTING 了解详细信息。
安全
如果您发现与安全相关的问题,请通过邮件发送到 security@spatie.be,而不是使用问题跟踪器。
明信片软件
您可自由使用此软件包,但如果它进入您的生产环境,我们非常感激您从您的家乡给我们寄一张明信片,并注明您正在使用我们的哪个软件包。
我们的地址是:Spatie,Kruikstraat 22,2018 安特卫普,比利时。
我们将在我们的公司网站上发布所有收到的明信片。点击查看。
致谢
许可证
MIT许可证(MIT)。更多信息请参阅许可证文件。