spatie/laravel-url-signer

Laravel 实现的 spatie/signed-url

资助包维护!
spatie

安装量: 546 479

依赖者: 3

建议者: 0

安全: 0

星级: 709

关注者: 17

分支: 51

开放问题: 0

3.2.0 2024-05-14 11:37 UTC

This package is auto-updated.

Last update: 2024-08-31 10:31:39 UTC


README

Latest Version on Packagist Build Status Quality Score Total Downloads

此包可以创建有限生命周期的 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)。更多信息请参阅许可证文件