chatbox-inc / laravel-firebase
Requires
- kreait/firebase-php: ^4.19
This package is auto-updated.
Last update: 2024-09-25 02:11:12 UTC
README
函数和作用域
基于 firebase-php 构造了一个面向 Laravel 的包装器。
https://firebase-php.readthedocs.io/en/stable/setup.html
与 kreait/laravel-firebase 支持基于 json 文件的认证不同,此库支持基于环境变量值的认证。
- 将 Firebase 对象注入到容器中。
- 实现基于 Firebase uid 的认证驱动程序。
- 为单元测试提供的 Auth Mock。
注入的 Firebase 对象
laravel-firebase
使用 kreait/firebase-php
。
https://github.com/kreait/firebase-php
您可以从 DI 容器中获取 Kreait\Firebase
对象。
您将在 config/services.php
中放置您的 Firebase 配置。
<?php return [ // ... 'firebase' => [ "type"=> "service_account", "project_id"=> env("FIREBASE_PROJECTID"), "private_key_id"=> env("FIREBASE_PRIVATEID"), "private_key"=> str_replace("\\n","\n",env("FIREBASE_PRIVATEKEY")), "client_email"=> env("FIREBASE_CLIENTEMAIL"), "client_id"=> env("FIREBASE_CLIENTID"), "auth_uri"=> "https://#/o/oauth2/auth", "token_uri"=> "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url"=> "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url"=> env("FIREBASE_X509CERTURL") ], ];
.env
的配置如下。
FIREBASE_PROJECTID=
FIREBASE_PRIVATEID=
FIREBASE_PRIVATEKEY=
FIREBASE_CLIENTEMAIL=
FIREBASE_CLIENTID=
FIREBASE_X509CERTURL=
容器中的对象也有别名 firebase
,因此您也可以这样接收 Firebase 对象。
/** @var \Kreait\Firebase $firebase */ $firebase = app("firebase");
FirebaseAuth
laravel-firebase
提供了一个名为 firebase_idtoken
的 Request Guard。
使用此保护程序,REST API 将如下编写。
Route::group([ "middleware" => [ "auth:firebase_idtoken", ] ],function(){ Route::post('/user', function(){ $user = Auth::guard("firebase_idtoken")->user(); //... }); });
在此保护程序中,Auth::guard("firebase_idtoken")
将返回一个 \Chatbox\Larabase\FirebaseUser
,它是 \Kreait\Firebase\Auth\UserRecord
的子类并实现了 Illuminate\Auth\Authenticatable
。
FirebaseAuth Mock
TestFirebaseUser
创建模拟的 Firebase 用户。
使用此功能,您可以在没有 Firebase 设置的情况下测试您的 REST API。
<?php namespace Tests\Feature; use Chatbox\Larabase\Testing\TestFirebaseUser; use Illuminate\Support\Str; use Tests\TestCase; class ProjectIdTest extends TestCase { protected function setUp(): void { parent::setUp(); if(!TestFirebaseUser::users()){ $token = Str::random(); $user = TestFirebaseUser::fake()->recordAs($token); // Store firebase user to database or ... $this->withHeader("Authorization", "Bearer $token"); }else{ TestFirebaseUser::remenber(function($token, $user){ $this->withHeader("Authorization", "Bearer $token"); }); } config()->set("app.url","https:///api/"); } }
TestFirebaseUser::fake()
创建 Firebase 模拟用户。方法 recordAs
将存储具有 uid(您生成的!)的用户。
TestFirebaseUser::users()
将返回所有存储的用户,而 TestFirebaseUser::remenber
将从存储的用户中弹出每个用户到传递的闭包中。