6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

LaravelでFirebase Admin SDK for PHPを利用する(トークン再取得編)

Posted at

Firebase Admin SDK for PHPでは、自動でトークン取得はできないっぽい

例えば、Javascriptなら以下のようにcurrentUser.getIdToken()で取得できる。
期限切れ前に自動で更新してくれるので便利。

firebase.auth().currentUser.getIdToken(/* forceRefresh */ true).then(function(idToken) {
  // Send token to your backend via HTTPS
  // ...
}).catch(function(error) {
  // Handle error
});

Firebase Admin SDK for PHPには似たような機能はなかった。
トークンが切れるたびにいちいちログインし直すのもなんだか嫌。

解決方法

    // ログインしていない場合
    if(!Session::get('token')){
      $signInResult = $this->auth->signInAnonymously();
      Session::put('token', $signInResult->idToken());
      Session::put('refresh_token', $signInResult->refreshToken());
    }

    // トークン認証
    try {
      $auth->verifyIdToken(Session::get('token'));
    } catch (\Exception $e) { // ここはExpiredTokenとかに絞った方が良い
      // 期限切れなら更新トークンを使って再取得
      $refresh_token = Session::get('refresh_token');
      $signInResult = $auth->signInWithRefreshToken($refresh_token);
      Session::put('token', $signInResult->idToken());
    }

流れは以下のような感じ。
1)ログイン時の結果にrefresh_tokenがあるので、セッションか何かに取っておく。
2)トークンが期限切れになったらverifyIdToken()で例外が発生するので、signInWithRefreshToken()で再取得

リフレッシュトークンが変更されるタイミングはそんなにないので、とりあえず使いたい場合は上記で間に合うと思う。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?