見出し画像

laravel8でFirebase Admin SDK for PHPを使ってみた(ユーザー作成からログインまで)

firebase authenticationを使う機会があったので、備忘もかねてアウトプットします。
今回はLaravelの設定とユーザー作成〜ログインまでを記載しています。

環境

Laravel8
PHP8

インストール

composer require kreait/firebase-php
composer require kreait/laravel-firebase

Laravelの設定

config/app.phpの設定

/*
 * Package Service Providers...
 */
Kreait\Laravel\Firebase\ServiceProvider::class,

.envの設定

APP_NAME=Laravel
APP_ENV=local
# ... 省略 ...
FIREBASE_CREDENTIALS=../firebase_credentials.json

※credentialsファイルはfirebaseからダウンロードしてください。
 取得方法は別途書く予定です。

config配下に設定ファイルを作成

php artisan vendor:publish --provider="Kreait\Laravel\Firebase\ServiceProvider" --tag=config

config/firebase.phpができる。特に編集はしなくてOKです。

ユーザー追加

routes/api.php

<?php
use Illuminate\Support\Facades\Route;

Route::group(['prefix' => 'v1', 'namespace' => 'Api\v1', 'as' => 'api.'], function () {
    Route::post('create', 'CreateController')->name('create');
});

app/Http/Controllers/Api/v1/CreateController.php

<?php
namespace App\Http\Controllers\Api\v1;

use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Kreait\Firebase\Auth;
use App\Http\Controllers\Controller;

class CreateController extends Controller
{
   /**
    * @var Auth
    */
   private $auth;

   /**
    * コンストラクタインジェクションで $firebase を用意します
    * @param Auth $auth
    */
   public function __construct(Auth $auth)
   {
       $this->auth = $auth;
   }

   /**
    * シングルアクションコントローラです。
    * @param  Request  $request
    * @return JsonResponse
    */
   public function __invoke(Request $request): JsonResponse
   {
       $email = $request->input('email');
       $password = $request->input('password');
       $user = $this->auth->createUserWithEmailAndPassword($email, $password);
       return response()->json([
           'user' => $user
       ]);
   }
}

これでpostmanやcurlで `/api/v1/create` にアクセスするとfirebaseにユーザーが作成されます。

IdTokenの取得

routes/api.php

<?php
use Illuminate\Support\Facades\Route;

Route::group(['prefix' => 'v1', 'namespace' => 'Api\v1', 'as' => 'api.'], function () {
    Route::post('create', 'CreateController')->name('create');
    Route::post('signin', 'SignInController')->name('signin');
});

app/Http/Controllers/Api/v1/SignInController.php

<?php
namespace App\Http\Controllers\Api\v1;

use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Kreait\Firebase\Auth;
use App\Http\Controllers\Controller;

class SignInController extends Controller
{
   /**
    * @var Auth
    */
   private $auth;

   /**
    * コンストラクタインジェクションで $firebase を用意します
    * @param Auth $auth
    */
   public function __construct(Auth $auth)
   {
       $this->auth = $auth;
   }

   /**
    * シングルアクションコントローラです。
    * @param  Request  $request
    * @return JsonResponse
    */
   public function __invoke(Request $request): JsonResponse
   {
       $email = $request->input('email');
       $password = $request->input('password');
       $signInResult = $this->auth->signInWithEmailAndPassword($email, $password);
       $id_token = $signInResult->data()['idToken'];
       return response()->json([
           'idToken' => $id_token
       ]);
   }
}

これで `/api/v1/signin` にアクセスするとfirebaseのidトークンが取得できます。
このトークンを利用していろいろできます。

最後に

思ったより簡単にfirebase authenticationが利用できました。
次回はidトークンからuidを取得して、ユーザー情報の更新をしようと思います。


この記事が気に入ったらサポートをしてみませんか?