danilopolani / laravel-fusionauth-jwt
Laravel Auth 防护器,用于 FusionAuth JWT
Requires
- php: ^8.2
- firebase/php-jwt: ^6.4
- illuminate/auth: ^10.0|^11.0
- illuminate/contracts: ^10.0|^11.0
- illuminate/http: ^10.0|^11.0
- illuminate/routing: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0
- pestphp/pest: ^2.0
README
在 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
类,如 email
、user
等。请查看以下示例,其中我们指定了用户角色
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 生成。