見出し画像

laravel8でFirebase Admin SDK for PHPを使ってみた(user情報変更)

前回の記事でFirebaseのユーザー情報を取得することができました。
では今回は更新をしていこうと思います。

routes/api.php

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

Route::group(['prefix' => 'v1', 'namespace' => 'Api\v1', 'as' => 'api.'], function () {
   Route::resource('users', UsersController::class)->only(['store']);
});

app/Http/Controllers/Api/v1/UsersController.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 UsersController 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 store(Request $request): JsonResponse
   {
       $idToken = $request->input('idToken');
       try {
           $verifiedIdToken = $this->auth->verifyIdToken($idToken);
       } catch (InvalidToken $e) {
           return response()->json([
               'error' => 'Unauthorized',
           ]);
       }

       $uid = $verifiedIdToken->claims()->get('sub');

       $before = $this->auth->getUser($uid);
       // user情報を更新する
       $this->auth->updateUser($uid, ['emailVerified' => true]);
       $after = $this->auth->getUser($uid);

       return response()->json([
           'before' => $before,
           'after' => $after,
       ]);
   }
}

updateUserメソッドでユーザー情報を変更することができます。
更新したいものを配列で渡すだけなのでかんたんですね!
今回はemailVerifiedを更新ということで、メールが認証されているかの更新をしました。
よくあるユーザー登録とかでメール認証してるしてないを管理するあれです。

変更できる項目はこちら。

$userProperties = [
   'email' => 'user@example.com',
   'emailVerified' => false,
   'phoneNumber' => '+15555550100',
   'password' => 'secretPassword',
   'displayName' => 'John Doe',
   'photoUrl' => 'http://www.example.com/12345678/photo.png',
   'disabled' => false,
];

だいたい、ユーザー作成と同じです。

メールアドレスやパスワードの変更はどうする?

こちらのようにすることで、変更可能です。

パスワード変更

$uid = 'xxxxxxxxxxxxxxxx';
$updatedUser = $this->auth->changeUserPassword($uid, 'new password');

メールアドレス変更

$uid = 'xxxxxxxxxxxxxxxx';
$updatedUser = $this->auth->changeUserEmail($uid, 'user@gmail.com');

ユーザーの無効化

$uid = 'xxxxxxxxxxxxxxxx';
$updatedUser = $this->auth->disableUser($uid);

ユーザーの有効化

$uid = 'xxxxxxxxxxxxxxxx';
$updatedUser = $this->auth->enableUser($uid);


ということで今回はfirebase上のユーザー情報を変更してみました。
簡単にできるのはありがたいですね。

ぜひ利用してみてください。


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