見出し画像

laravel8でFirebase Admin SDK for PHPを使ってみた(firebaseuid取得)

以前の記事でFirebaseの設定からログイン(idtokenの取得)まで実施しました。
今回はその続きを記載できればと思っています。

idtokenを使ってfirebase uidを取得することで、さらにいろいろな操作をすることができます。

routes/api.php

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

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

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

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

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

class UidController 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
   {
       $id_token = $request->input('idToken');
       try {
           $verifiedIdToken = $this->auth->verifyIdToken($id_token);
       } catch (InvalidToken $e) {
           return response()->json([
               'error' => 'Unauthorized',
           ]);
       }

       $uid = $verifiedIdToken->claims()->get('sub');
       return response()->json([
           'uid' => $uid,
       ]);
   }
}

curlとかでidTokenをdataに入れてポストしてあげることで、uidを取得することができます。

uid取得後に下記のようにuidを利用して、firebase authentication上のユーザー情報を取得できます。

$firebase_user = $this->auth->getUser($uid);

ちなみにメールアドレスや電話番号からもユーザー情報を取得できます。
メソッドが違うので注意が必要です。

$user = $this->auth->getUserByEmail('xxxxxxxxxxxxxx@gmail.com');
$user = $this->auth->getUserByPhoneNumber('090-0000-0000');

次回はuidを利用してfirebase authentication上のユーザー情報を書き換えてみたいと思います。

おまけ

下記のようにすることで、どのログイン処理で入ってきたかが取得することができます。

$firebase_user->providerData[0]->providerId;

githubだったりgoogleだったりといろんなログイン方法を使えるのがfirebase authenticationの魅力なので、ぜひ利用してみてください。

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