composer require kreait/firebase-php
composer require kreait/laravel-firebase
php artisan vendor:publish --provider="Kreait\Laravel\Firebase\ServiceProvider" --tag=config
vi tests/Unit/LaravelFirebaseTest.php
'ServiceProvider' => Kreait\Laravel\Firebase\ServiceProvider::class,
# Firebase設定
FIREBASE_CREDENTIALS=firebase.json
ダウンロードしたファイルを firebase.json としてプロジェクトトップへアップロードします。
vi tests/Unit/LaravelFirebaseTest.php
<?php
namespace Tests\Unit;
use Tests\TestCase;
use Kreait\Firebase\Exception\Auth\RevokedIdToken;
use InvalidArgumentException;
class LaravelFirebaseTest extends TestCase
{
/**
* @testdox JWTトークン取得
*/
public function test_verify_firebase_auth_jwt()
{
// テストしたいトークン
$token = "ey....................................";
// @see vendor/kreait/laravel-firebase/src/ServiceProvider.php
$auth = app('firebase.auth');
try {
// @see https://github.com/kreait/firebase-php/blob/7.x/src/Firebase/Contract/Auth.php
$parsedToken = $auth->verifyIdToken($token, $checkIfRevoked = true);
} catch (InvalidArgumentException $e) {
return $e->getMessage();
} catch (RevokedIdToken $e) {
return $e->getMessage();
}
dump($parsedToken->claims());
$this->assertSame($parsedToken->claims()->get('name'), "<Firebaseに登録しているユーザー名>");
}
}
php artisan test --testdox tests/Unit/LaravelFirebaseTest.php
https://github.com/kreait/firebase-php/blob/7.x/src/Firebase/Contract/Auth.php
vi app/Http/Middleware/Firebase.php
app/Http/Middleware/Firebase.php
<?php
namespace App\Http\Middleware;
use Kreait\Firebase\Contract\Auth;
use Kreait\Firebase\Exception\Auth\FailedToVerifyToken;
class Firebase
{
private Auth $auth;
public function __construct(Auth $auth)
{
$this->auth = $auth;
}
public function handle($request, \Closure $next)
{
$idTokenString = $request->headers->get('authorization');
$token = trim(str_replace('Bearer', '', $idTokenString));
try {
$verifiedIdToken = $this->auth->verifyIdToken($token);
} catch (FailedToVerifyToken $e) {
echo 'The token is invalid: ' . $e->getMessage();
}
$user_id = $verifiedIdToken->claims()->get('user_id');
$email = $verifiedIdToken->claims()->get('email');
$request->attributes->set('firebase_data', [
'user_id' => $user_id,
'email' => $email,
]);
return $next($request);
}
}
vi app/Http/Kernel.php
app/Http/Kernel.php
protected $middlewareAliases = [
........
// 次の行を追加
'firebase' => \App\Http\Middleware\Firebase::class,
];
vi routes/api.php
Route::get('/ping', function () {
return 'ping ok!!!';
});
まずはトークンなしでアクセスします(ブラウザからでok) http://YOUR-SERVER/api/ping
vi routes/api.php
先程のルートにミドルウェアを追加します
Route::group(['middleware' => 'firebase'], function () {
Route::get('/ping', function () {
return 'ping ok!!!';
});
});
PostmanやVS Code Thunder Client などでアクセスします。