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の魅力なので、ぜひ利用してみてください。
この記事が気に入ったらサポートをしてみませんか?