bambolee-digital / laravel-firebase-id-token
Firebase ID Token 身份验证用于 Laravel
Requires
- php: ^8.1
- illuminate/support: ^10.0|^11.0
- kreait/firebase-php: ^7.0
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0
- phpunit/phpunit: ^10.0
README
本包提供了 Firebase ID Token 身份验证与 Laravel 的无缝集成,支持 Laravel 10.x 和 11.x。它允许您使用 Firebase ID Token 容易地验证用户,并可选择与 Laravel Sanctum 集成以管理 API 令牌。
功能
- Firebase ID Token 验证和用户身份验证
- 根据 Firebase 数据自动创建和更新用户
- 可配置的身份验证顺序(Firebase 和/或 Sanctum)
- 自定义声明映射
- Sanctum 集成以管理 API 令牌
- 兼容 Laravel 10.x 和 11.x
安装
您可以通过 composer 安装此包
composer require bambolee-digital/laravel-firebase-id-token
配置
发布配置文件
php artisan vendor:publish --provider="BamboleeDigital\LaravelFirebaseIdToken\Providers\FirebaseAuthServiceProvider" --tag="config"
这将创建一个 bambolee-firebase.php
配置文件在您的 config
目录中。
数据库迁移
此包需要在您的用户表中添加一个 external_id
列来存储 Firebase 用户 ID。已包含迁移来添加此列。要运行迁移,请执行
php artisan migrate
如果您需要自定义迁移,可以发布它
php artisan vendor:publish --provider="BamboleeDigital\LaravelFirebaseIdToken\Providers\FirebaseAuthServiceProvider" --tag="migrations"
然后,您可以在运行 php artisan migrate
之前,在您的 database/migrations
目录中修改迁移文件。
更新用户模型
在添加 external_id
列后,请确保将其添加到您的 User 模型中的 $fillable
数组中
use Illuminate\Foundation\Auth\User as Authenticatable; use Laravel\Sanctum\HasApiTokens; class User extends Authenticatable { use HasApiTokens; protected $fillable = [ 'name', 'email', 'password', 'external_id', // Add this line ]; // ... }
Firebase 凭据
在您的 .env
文件中设置 Firebase 凭据
FIREBASE_CREDENTIALS_BASE64=your_base64_encoded_firebase_credentials
您可以通过对 Firebase 服务账户 JSON 文件进行 base64 编码来生成它
base64 -i path/to/your/firebase-credentials.json
配置选项
在 config/bambolee-firebase.php
中,您可以自定义各种设置
return [ 'credentials_base64' => env('FIREBASE_CREDENTIALS_BASE64'), 'auth_order' => env('AUTH_ORDER', 'firebase,sanctum'), 'user_model' => \App\Models\User::class, 'custom_claims' => [ // 'role' => 'user_role', ], 'auto_create_user' => true, 'default_user_data' => [ 'name' => 'Dog Dot App User', ], 'sanctum' => [ 'expiration' => null, 'token_name' => 'firebase-auth-token', ], ];
用法
设置守卫
在您的 config/auth.php
文件中,添加 Firebase 守卫
'guards' => [ // ... 'firebase' => [ 'driver' => 'firebase', 'provider' => 'users', ], ],
保护路由
您可以使用 auth.configurable
中间件来保护您的路由
Route::middleware(['auth.configurable'])->group(function () { Route::get('/user', function () { return Auth::user(); }); });
此中间件将尝试使用您配置中指定的顺序进行身份验证。
手动身份验证
您可以使用 Firebase 守卫手动验证用户
if (Auth::guard('firebase')->check()) { $user = Auth::guard('firebase')->user(); // User is authenticated }
自定义声明
您可以通过在配置中指定它们来映射 Firebase 中的自定义声明到您的用户模型
'custom_claims' => [ 'role' => 'firebase_role', ],
这将把 Firebase 令牌中的 'firebase_role' 声明映射到您的用户模型中的 'role' 属性。
Sanctum 集成
如果您使用 Sanctum,您可以配置令牌过期时间和名称
'sanctum' => [ 'expiration' => 60 * 24, // 24 hours 'token_name' => 'firebase-auth-token', ],
这将在 Firebase 身份验证成功后为用户创建一个 Sanctum 令牌。
测试
composer test
变更日志
请参阅 CHANGELOG.md 了解最近更改的更多信息。
贡献
请参阅 CONTRIBUTING.md 了解详细信息。
安全漏洞
如果您发现任何与安全相关的问题,请通过电子邮件 security@bambolee.digital 联系我们,而不是使用问题跟踪器。
致谢
许可证
MIT 许可协议。请参阅许可文件以获取更多信息。# laravel-firebase-id-token