chatbox-inc/laravel-firebase

此包的最新版本(v1.0.1)没有可用的许可证信息。

v1.0.1 2019-04-10 16:10 UTC

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 将从存储的用户中弹出每个用户到传递的闭包中。