Dart あるいは Firebase Admin SDK のない言語でユーザー管理
Dart で Firebase Auth のユーザー情報を取得したり、ユーザーを削除したかったのだけど、Firebase Admin SDK は Dart では提供されていなくて困った。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); }