bambolee-digital/laravel-firebase-id-token

Firebase ID Token 身份验证用于 Laravel

1.0.1 2024-09-09 21:42 UTC

This package is auto-updated.

Last update: 2024-09-19 17:38:44 UTC


README

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

本包提供了 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