kreait/laravel-firebase
Laravel integration for the Firebase PHP Admin SDK. Configure Firebase service account credentials via env/JSON/array, access Firebase services through Laravel’s container/facades, and support multiple Firebase projects in one app.
## Getting Started
### Minimal Setup
1. **Install the package**:
```bash
composer require kreait/laravel-firebase
Publish the config (optional but recommended for customization):
php artisan vendor:publish --provider="Kreait\Laravel\Firebase\ServiceProvider" --tag=config
Configure Firebase credentials:
FIREBASE_DATABASE_URL (e.g., FIREBASE_DATABASE_URL=https://your-project.firebaseio.com) to .env.storage/app/firebase-auth.json or set FIREBASE_CREDENTIALS in .env to its path.First use case:
use Kreait\Laravel\Firebase\Facades\Firebase;
// Get the Auth component (default project)
$auth = Firebase::auth();
$user = $auth->getUser('user-id');
use Kreait\Laravel\Firebase\Facades\Firebase;
class UserService {
public function __construct(
protected Firebase $firebase
) {}
public function getUserData(string $uid) {
$auth = $this->firebase->auth();
return $auth->getUser($uid);
}
}
// Default project
$auth = Firebase::auth();
$database = Firebase::database();
// Specific project
$appAuth = Firebase::project('app')->auth();
Authentication:
$auth = Firebase::auth();
$user = $auth->getUser('uid');
$customToken = $auth->createCustomToken($uid);
Realtime Database:
$database = Firebase::database();
$ref = $database->getReference('path/to/data');
$snapshot = $ref->getSnapshot();
Firestore:
$firestore = Firebase::firestore();
$document = $firestore->document('collection/doc');
$data = $document->data();
Storage:
$storage = Firebase::storage();
$bucket = $storage->bucket();
$file = $bucket->upload('local-path', ['name' => 'remote-name']);
// config/firebase.php
'http_client_options' => [
'middlewares' => [
\App\Http\Middleware\FirebaseLoggingMiddleware::class,
],
],
// config/firebase.php
'projects' => [
'default' => [
'database_url' => env('FIREBASE_DATABASE_URL'),
],
'app' => [
'database_url' => env('FIREBASE_APP_DATABASE_URL'),
'credentials' => [
'type' => 'service_account',
// ... rest of the credentials
],
],
],
// Usage
$appAuth = Firebase::project('app')->auth();
Credentials Auto-Discovery:
GOOGLE_APPLICATION_CREDENTIALS or FIREBASE_CREDENTIALS.storage/app/firebase-auth.json).FIREBASE_CREDENTIALS in .env if auto-discovery fails.PHP Version:
kreait/laravel-firebase:6.x).Deprecated Facades:
FirebaseAuth, FirebaseDatabase, etc.) are removed in v4.0.0+.Kreait\Laravel\Firebase\Facades\Firebase facade instead.HTTP Timeouts:
kreait/firebase-php v6.7.0).config/firebase.php:
'http_client_options' => [
'timeout' => 60, // in seconds
],
Firestore Default Database:
(default). Override via config:
'firestore' => [
'default_database' => 'custom-db-name',
],
Enable HTTP Debug Logging:
// config/firebase.php
'logging' => [
'http_debug_log_channel' => 'stack', // or 'single'
],
storage/logs/laravel.log).Token Caching:
$auth = Firebase::auth();
$auth->getFactory()->getAuth()->clearTokenCache();
Multi-Project Issues:
config/firebase.php has unique database_url or project_id.Firebase::projects(); // Lists all configured projects
Reuse Components:
Auth, Database) are singletons. Inject them once and reuse:
$auth = Firebase::auth(); // Reused across requests
Batch Operations:
batch() or Database’s update() for bulk writes to reduce API calls:
$batch = $firestore->batch();
$batch->set($doc1, $data1);
$batch->set($doc2, $data2);
$batch->commit();
Environment-Specific Configs:
config() helper to dynamically switch configs:
$config = config("firebase.{$env}");
Custom HTTP Client:
$this->app->bind(
\Kreait\Firebase\Firebase::class,
fn () => Firebase::createApp(
$this->app->make(\Kreait\Firebase\Auth::class),
$this->app->make(\Kreait\Firebase\Http\Client::class)
)
);
Event Listeners:
// Example: Listen for user creation
event(new UserCreated($user));
Testing:
Mockery:
$mockAuth = Mockery::mock(\Kreait\Firebase\Auth::class);
$this->app->instance(\Kreait\Firebase\Auth::class, $mockAuth);
AppCheck Integration:
$appCheck = Firebase::appCheck();
$token = $appCheck->createToken('app');
config/firebase.php:
'app_check' => [
'api_key' => env('FIREBASE_APP_CHECK_API_KEY'),
],
---
How can I help you explore Laravel packages today?