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を取得して、ユーザー情報の更新をしようと思います。