jhumanj/laravel-signed-auth-middleware

一个使用签名链接进行用户验证的 Laravel 扩展包

1.0.1 2021-02-15 19:28 UTC

This package is auto-updated.

Last update: 2024-09-16 03:21:25 UTC


README

一个简单的、安全的 Laravel 魔术登录链接生成器

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

此扩展包允许您生成链接,以对用户进行验证。您可以使用此功能用于无密码应用,或简单地用于验证应用发送的链接(通过电子邮件、短信等)。

为什么选择此扩展包

我开始使用 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)。有关更多信息,请参阅 许可证文件