🐡

PHPからFirebase Authenticationを利用する

2023/01/30に公開

はじめに

この記事では、PHPからFirebaseのAuthentication(認証機能)を利用する方法についてまとめています。

Firebase Authentication ドキュメント
https://firebase.google.com/docs/auth

PHPのSDKをインストールする

PHPからFirebase Authenticationを利用するにあたり、つぎのSDKを使用します。

https://github.com/kreait/firebase-php

About
Unofficial Firebase Admin SDK for PHP

kreait/firebase-phpが非公式のSDKであることは、ご留意ください。

Composerでkreait/firebase-phpをインストールする

kreait/firebase-phpのインストールには、composerを用います。

$ composer require kreait/firebase-php

Firebaseのcredentialを用意する

kreait/firebase-phpは、Firebaesのcredentialを必要とします。

credentialには、jsonファイルを使えるため、Firebaseの管理画面からダウンロードします。

jsonのダウンロードする手順を、つぎに示します。

  • プロジェクトの概要の隣の歯車を選択 => プロジェクトの設定を選択

  • サービスアカウントタブを選択 => 新しい秘密鍵の生成ボタンを押下

ダウンロードしたjsonファイルは、任意の名前で使用します。
この記事では、credentials.jsonという名前で保存します。


SDKを使用する

Kreait\Firebase\Factoryのインスタンスを生成する

FirebaseのAuthenticationを利用するには、Kreait\Firebase\Factoryのインスタンスから、Kreait\Firebase\Authのインスタンスを生成し、Authクラスが持つメソッドを呼び出すことになります。

そのため、まずはFactoryクラスのインスタンスを生成します。
withServiceAccountの引数には、事前にダウンロードしたcredentials.jsonのパスを指定します。

$factory = (new Factory())->withServiceAccount('<保存ディレクトリ>/credentials.json');

Kreait\Firebase\Authのインスタンスを生成する

Factoryクラスのインスタンスが取得できたので、つぎはKreait\Firebase\Authのインスタンスを生成します。

Authのインスタンスを生成する例を、つぎに示します。

$auth = $factory->createAuth();

SDKのAuthクラスの利用方法

メールアドレスとパスワードでログインする

メールアドレスとパスワードでログインするためには、signInWithEmailAndPasswordメソッドを利用します。

このメソッドは、Kreait\Firebase\Auth\SignInResultを返します。
SignInResultには、例えばidTokenaccessTokenを取得するメソッドがあります。

$signInResult = $auth->signInWithEmailAndPassword(
    email: $email,
    clearTextPassword: $password,
);

$signInResult->idToken();

セッションCookieを作成する

セッションCookieを管理する
https://firebase.google.com/docs/auth/admin/manage-cookies

セッションCookieを作成するには、createSessionCookieメソッドを使用します。
createSessionCookieはidTokenと期限が必要です。
この例では、ログイン時に取得したSignInResultからidTokenを取り出しています。

$fiveMinutes = 60 * 5;
$sessionCookie = '';
try {
    $sessionCookie = $auth->createSessionCookie($signInResult->idToken(), $fiveMinutes);
} catch (FailedToCreateSessionCookie $e) {
    // error handling
}

TODO

その他のAuthクラスの利用方法を追記予定。

Discussion