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()
で再取得
リフレッシュトークンが変更されるタイミングはそんなにないので、とりあえず使いたい場合は上記で間に合うと思う。