やりたいこと

フロントエンドで Firebase から受け取った ID トークンをバックエンドに転送し、バックエンドでその正当性を検証する。


Laravel + Firebase のプロジェクトです。

Firebase のドキュメントには複数言語でコードが掲載されていますが、PHP のコードありません。

Firebase
ID トークンを確認する
https://firebase.google.com/docs/auth/admin/verify-id-tokens?hl=ja

kreait/firebase-php を使って同様のことができ、その方法について掲載いたします。

環境

  • PHP 7.1 系
  • Laravel 5.5
  • kreait/firebase-php ^4.0

実装方法

当記事では Firebase Admin SDK for PHP を利用します。

Firebase Admin SDK for PHP
https://firebase-php.readthedocs.io/en/latest/index.html

Laravel との連携は、Firebase 用のサービスプロバイダ追加し、アプリケーションからはそれを利用する実装とします。

当サンプルは、次の Issue を参考に実装手順をまとめまたものです。

How to use with Laravel?
https://github.com/kreait/firebase-php/issues/61

パッケージのインストール

まずは composer コマンドを実行し今回利用するパッケージをインストールします。

1composer require kreait/firebase-php ^4.0
kreait/firebase-php
https://github.com/kreait/firebase-php

接続情報の定義

Firebase の接続情報を定義する config ファイルを作りましょう。

1cd [アプリケーションのルートディレクトリ]
2touch config/firebase.php

作成したファイルは次のようにします。

1<?php
2return [
3  'servie_account_path' => env('FIREBASE_SERVICE_ACCOUNT_PATH'),
4  'database_uri'        => env('FIREBASE_DATABASE_URI'),
5];

対応する定義を .env.env.example にも追加します。

1FIREBASE_SERVICE_ACCOUNT_PATH=
2FIREBASE_DATABASE_URI=

.env にはご自身の Firebase アプリケーション情報を設定してください。

サービスプロバイダ

artisan コマンドを実行してサービスプロバイダを生成します。

1$ php artisan make:provider FirebaseServiceProvider

ファイルは /app/Providers/FirebaseServiceProvider.php に生成されます。
このファイルを編集し、次のようにします。

 1<?php
 2namespace App\Providers;
 3
 4use Kreait\Firebase;
 5use Kreait\Firebase\ServiceAccount;
 6use Kreait\Firebase\Factory as FirebaseFactory;
 7use Illuminate\Support\ServiceProvider;
 8
 9class FirebaseServiceProvider extends ServiceProvider
10{
11    /**
12     * Bootstrap the application services.
13     *
14     * @return void
15     */
16    public function boot()
17    {
18        //
19    }
20
21    /**
22     * Register the application services.
23     *
24     * @return void
25     */
26    public function register()
27    {
28        $this->app->singleton(Firebase::class, function() {
29            $servieAccountPath = \Config::get('firebase.servie_account_path');
30            $databaseUri       = \Config::get('firebase.database_uri');
31
32            return (new FirebaseFactory())
33                ->withServiceAccount(ServiceAccount::fromJsonFile(base_path($servieAccountPath)))
34                ->withDatabaseUri($databaseUri)
35                ->create();
36        });
37
38        $this->app->alias(Firebase::class, 'firebase');
39    }
40}

このサービスプロバイダをアプリケーションに追加します。

config/app.php を次のように編集します。

1    'providers' => [
2        :
3+       App\Providers\FirebaseServiceProvider::class,
4    ],

使用例

1<?php
2$firebase = app('firebase');
3try {
4    return $firebase->getAuth()->verifyIdToken($idTokenString);
5} catch (\Firebase\Auth\Token\Exception\InvalidToken $e) {
6    // TODO 例外処理
7}

おわりに

カンタンに高機能なアプリケーションが構築できる Firebase はとても便利ですね。
こういったサービスを上手く褐葉することで、おもしろい Web アプリをどんどん開発できそうです。


“WEB+DB PRESS Vol.105” は Firebase を特集してますよ。

WEB+DB PRESS Vol.105

小笠原 みつき,西村 公宏,柳 佳音,志甫 侑紀,池田 友洋,木村 涼平,髙橋 優介,大塚 雅和,飯塚 直,吉川 竜太,末永 恭正,久保田 祐史,浜田 真成,穴井 宏幸,大島 一将,桑原 仁雄,牧 大輔,池田 拓司,はまちや2,竹原
出版社:技術評論社  発売日:2018-06-23

Amazonで詳細を見る

PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応

竹澤 有貴,栗生 和明,新原 雅司,大村 創太郎
出版社:ソシム  発売日:2018-09-26

Amazonで詳細を見る

この記事の著者 Webrow (うぇぶろう)
Web アプリ開発、 Web 顧問 エンジニア、WordPress サポートいたします。