jhumanj / laravel-signed-auth-middleware
一个使用签名链接进行用户验证的 Laravel 扩展包
Requires
- php: ^7.4|^8.0
- illuminate/contracts: ^8.0
- spatie/laravel-package-tools: ^1.1
Requires (Dev)
- orchestra/testbench: ^6.12
- phpunit/phpunit: ^9.3
- spatie/laravel-ray: ^1.9
- spatie/ray: ^1.19
- vimeo/psalm: ^4.4
This package is auto-updated.
Last update: 2024-09-16 03:21:25 UTC
README
一个简单的、安全的 Laravel 魔术登录链接生成器
此扩展包允许您生成链接,以对用户进行验证。您可以使用此功能用于无密码应用,或简单地用于验证应用发送的链接(通过电子邮件、短信等)。
为什么选择此扩展包
我开始使用 laravel-passwordless-login 扩展包,由 grosv 提供,效果非常好。不幸的是,由于重定向,我在 Google 分析和 UTM 跟踪上遇到了一些问题。我想扩展这个包,但后来意识到没有简单的解决方案,因为 UTM 跟踪参数不应用于内部网站导航的上下文中。因此,我创建了此扩展包,它受到了 laravel-passwordless-login 的极大启发。
签名认证中间件扩展包允许您生成签名链接,该链接将自动使用中间件(无需重定向)验证用户。与 laravel-passwordless-login 不同,此扩展包不支持 use-once
链接功能。
安装
您可以通过 composer 安装此扩展包
composer require jhumanj/laravel-signed-auth-middleware
您可以使用以下命令发布配置文件
php artisan vendor:publish --tag="laravel-signed-auth-middleware-config"
这是发布配置文件的内容
return [ 'signature_param_name' => 'auth-signature', 'default_expire' => 60, 'remember_login' => true, 'user_guard' => 'web' ];
用法
设置中间件
首先,需要设置中间件。中间件需要在 auth 中间件之前注册。您可以通过将 HasSignedAuth
特性添加到您的 App\Http\Kernel.php
文件中来实现这一点
use Illuminate\Foundation\Http\Kernel as HttpKernel; use JhumanJ\LaravelSignedAuthMiddleware\Traits\HasSignedAuth; class Kernel extends HttpKernel { use HasSignedAuth; // ... public function __construct(Application $app, Router $router) { parent::__construct($app, $router); $this->setupSignedAuthMiddleware(); } }
然后,您有两个选择:在所有路由上使用中间件或不在所有路由上使用。要将中间件添加到所有路由上,请将中间件添加到 web 中间件组中。
// App/Http/Kernel.php protected $middlewareGroups = [ 'web' => [ // ... \JhumanJ\LaravelSignedAuthMiddleware\SignedAuthMiddleware::class, ], ];
现在,如果您不希望在所有 Web 路由上使用中间件,您也可以定义一个路由中间件,如下所示
// Kernel.php protected $routeMiddleware = [ 'auth.signed' => \JhumanJ\LaravelSignedAuthMiddleware\SignedAuthMiddleware::class, ];
然后,在您的路由文件中按如下方式使用它
// routes/web.php Route::get('/', function () { return view('welcome'); })->middleware('auth.signed','auth');
创建认证签名链接
以下是生成将验证用户身份的签名链接的方法
use JhumanJ\LaravelSignedAuthMiddleware\Facades\SignedAuth; $signedUrl = SignedAuth::forUser($user) ->route('welcome') ->generate();
您还可以覆盖默认的过期时间
use JhumanJ\LaravelSignedAuthMiddleware\Facades\SignedAuth; $signedUrl = SignedAuth::forUser($user) ->expired(60*24) // expires in 24 hours ->route('welcome') ->generate();
或将它设置为永不过期
use JhumanJ\LaravelSignedAuthMiddleware\Facades\SignedAuth; $signedUrl = SignedAuth::forUser($user) ->neverExpires() ->route('welcome') ->generate();
如果您需要添加更多参数,只需像使用正常的 route()
方法一样进行即可
use JhumanJ\LaravelSignedAuthMiddleware\Facades\SignedAuth; $signedUrl = SignedAuth::forUser($user) ->route('welcome',[ 'utm_source' => 'source', 'utm_medium' => 'medium', 'utm_campaign' => 'utm_campaign' ]) ->generate();
测试
在发送拉取请求之前,请确保所有扩展包测试都运行成功。
composer test
更新日志
有关最近更改的更多信息,请参阅 更新日志。
贡献
如果您想帮助我维护此扩展包或仅仅让它变得更好,请进行贡献。请友好相待。
报告问题
对于安全问题,请直接通过 twitter 或通过电子邮件至 julien@nahum.net 联系我。对于任何其他问题,请使用此处的问题跟踪器。
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件。