kitak blog

Kみたいなエンジニアになりたいブログ

Dart あるいは Firebase Admin SDK のない言語でユーザー管理

Dart で Firebase Auth のユーザー情報を取得したり、ユーザーを削除したかったのだけど、Firebase Admin SDKDart では提供されていなくて困った。REST API の仕様も正式に公開されていない。

調べたら、Firebase Auth の認証機構は Google IdentityToolkit と統合されていて、IdentityToolkit の REST API を使うことで Firebase Admin SDK 相当の操作ができることがわかった。 IdentityToolkit のクライアントは googleapis のパッケージで提供されているので、それを利用すればOK。

ユーザー情報の取得

import 'package:googleapis/identitytoolkit/v3.dart';
import 'package:googleapis_auth/auth.dart';
import 'package:googleapis_auth/auth_io.dart';

void main() async {
    final credentials =
        ServiceAccountCredentials.fromJson("service_account.json の内容");
    final httpClient = await clientViaServiceAccount(
        credentials, ['https://www.googleapis.com/auth/identitytoolkit']);
    final identityToolkit = IdentitytoolkitApi(httpClient);
    final relyingParty = identityToolkit.relyingparty;
    final request = IdentitytoolkitRelyingpartyGetAccountInfoRequest()
      ..localId = ["UID"];
    final response = await relyingParty.getAccountInfo(request);
    print(response.users[0].name);
    print(response.users[0].email);
}

ユーザーの削除

import 'package:googleapis/identitytoolkit/v3.dart';
import 'package:googleapis_auth/auth.dart';
import 'package:googleapis_auth/auth_io.dart';

void main() async {
    final credentials = ServiceAccountCredentials.fromJson("service_account.json の内容");
    final httpClient = await clientViaServiceAccount(
        credentials, ['https://www.googleapis.com/auth/identitytoolkit']);
    final identityToolkit = IdentitytoolkitApi(httpClient);
    final relyingParty = identityToolkit.relyingparty;
    final request = IdentitytoolkitRelyingpartyDeleteAccountRequest()
      ..localId = "UID";
    await relyingParty.deleteAccount(request);
}