danilopolani/laravel-fusionauth-jwt

Laravel Auth 防护器,用于 FusionAuth JWT

v3.0.0 2024-03-10 17:01 UTC

This package is auto-updated.

Last update: 2024-09-10 18:03:26 UTC


README

Latest Version on Packagist Total Downloads GitHub Actions

在 Laravel 中实现 FusionAuth JWT 的 Auth 防护器。
它还包含一个中间件,用于检查用户角色。

安装

您可以通过 composer 安装此包

composer require danilopolani/laravel-fusionauth-jwt

然后发布其配置文件

php artisan vendor:publish --tag=fusionauth-jwt-config

配置

该包有几个值得注意的配置选项。

用法

要开始保护您的 API,您需要将 Guard 和 Auth Provider 添加到您的 config/auth.php 配置文件中

'guards' => [
    // ...
    'fusionauth' => [
        'driver' => 'fusionauth',
        'provider' => 'fusionauth',
    ],
],

'providers' => [
    // ...
    'fusionauth' => [
        'driver' => 'fusionauth',
    ],
],

然后,您可以使用 auth:fusionauth 防护器来保护您的端点;您可以将它应用到一组或单个路由

// app\Http\Kernel.php

protected $middlewareGroups = [
    'api' => [
        'auth:fusionauth',
        // ...
    ],
];

// or routes/api.php

Route::get('users', [UserController::class, 'index'])
    ->middleware('auth:fusionauth');

现在,对那些端点的请求将检查给定的 JWT(作为 Bearer 令牌)是否有效。

要获取当前登录用户或检查是否已登录,您可以使用常规的 Auth 门面方法,指定 fusionauth 防护器

Auth::guard('fusionauth')->check();

/** @var \DaniloPolani\FusionAuthJwt\FusionAuthJwtUser $user */
$user = Auth::guard('fusionauth')->user();

角色中间件

该包提供了一种方便的中间件来检查用户角色(存储在 roles 键中)。

您可以在 Kernel.php 中的中间件组或特定路由上应用它

// app\Http\Kernel.php

protected $middlewareGroups = [
    'api' => [
        'auth:fusionauth',
        \DaniloPolani\FusionAuthJwt\Http\Middleware\CheckRole::class,
        // ...
    ],
];

// or routes/api.php

Route::get('users', [UserController::class, 'index'])
    ->middleware(['auth:fusionauth', 'fusionauth.role']);

默认情况下,中间件将检查当前用户是否有配置文件中指定的 default_role,但您也可以使用一个不同于默认值的特定角色

// routes/api.php

Route::get('users', [UserController::class, 'index'])
    ->middleware(['auth:fusionauth', 'fusionauth.role:admin']);

对于更复杂的情况,我们建议您查看 CheckRole 中间件的编写方式(使用 RoleManager 类)并编写自己的。

在测试中的用法

当您需要在 Laravel 中测试您的端点时,您可以使用 actingAs 方法设置当前登录用户。

您可以将任何属性传递给 FusionAuthJwtUser 类,如 emailuser 等。请查看以下示例,其中我们指定了用户角色

use DaniloPolani\FusionAuthJwt\FusionAuthJwtUser;

$this
    ->actingAs(
        new FusionAuthJwtUser([
            'roles' => ['user', 'admin'],
        ]),
        'fusionauth',
    )
    ->get('/api/users')
    ->assertOk();

如果您需要在 HTTP 测试之外设置已认证用户(因此不能使用 actingAs()),您可以使用 Auth 门面的 setUser() 方法

use DaniloPolani\FusionAuthJwt\FusionAuthJwtUser;
use Illuminate\Support\Facades\Auth;

Auth::guard('fusionauth')->setUser(
    new FusionAuthJwtUser([
        'roles' => ['user', 'admin'],
    ])
);

变更日志

请参阅 CHANGELOG 了解最近更改的信息。

贡献

请参阅 CONTRIBUTING 了解详细信息。

安全

如果您发现任何安全问题,请通过电子邮件 danilo.polani@gmail.com 而不是使用问题跟踪器。

鸣谢

许可协议

MIT 许可协议(MIT)。请参阅 许可文件 了解更多信息。

Laravel 包模板

本软件包使用 Laravel Package Boilerplate 生成。