LoginSignup
2
1

More than 3 years have passed since last update.

【Go言語】FirebaseAuthのユーザーを全て削除する

Last updated at Posted at 2020-03-04

概要

FirebaseAuthを検証で使ってたら example1@example.org みたいなユーザーが大量に増えてしまったので一括で削除を行いたいが、Firebaseのコンソールからは出来ないみたいだったので Firebase Admin SDK で一括削除を行うことにした。該当記事が見つけられなかったので自分用メモも兼ねて記事を書いた。

今回は Go 言語で削除処理を書いたが、下記の言語も対応している模様。

  • Node.js
  • Java
  • Python
  • C#

参考: サーバーに Firebase Admin SDK を追加する

前準備

  1. go get firebase.google.com/go で Firebase Admin SDK を導入
  2. Firebaseコンソールからサービスアカウントキーを取得する

サービス アカウント用の秘密鍵ファイルを生成するには:

1. Firebase コンソールで、[設定] > [サービス アカウント] を開きます。
2. [新しい秘密鍵の生成] をクリックし、[キーを生成] をクリックして確定します。
3. キーを含む JSON ファイルを安全に保管します。

※ https://firebase.google.com/docs/admin/setup より引用

実装

全ユーザーを一括削除するAPIは存在しなかったので、全ユーザーを取得してイテレータで1つずつ削除処理を行った。
参考: ユーザー管理  |  Firebase

package main

import (
    "context"
    "firebase.google.com/go"
    "firebase.google.com/go/auth"
    "google.golang.org/api/iterator"
    "google.golang.org/api/option"
    "log"
)

func main() {
    // Firebaseと接続する
    opt := option.WithCredentialsFile("./サービスアカウントキー.json")
    app, err := firebase.NewApp(context.Background(), nil, opt)
    if err != nil {
        log.Fatalf("error connect firebase: %s\n", err)
    }

    // FirebaseAuthクライアントを取得
    client, err := app.Auth(context.Background())
    if err != nil {
        log.Fatalf("error connect firebase auth: %s\n", err)
    }

    // 全てのユーザーを取得する
    iter := client.Users(context.Background(), "")
    for {
        user, err := iter.Next()
        if err == iterator.Done {
            break
        }
        if err != nil {
            log.Fatalf("error listing users: %s\n", err)
        }
        log.Printf("read user email: %v\n", user.Email)

        // ユーザーを削除する
        err = deleteUser(client, user.UID)
        if err != nil {
            log.Fatalf("error deleting user: %s\n", err)
        }
    }
}

// ユーザーを削除する
func deleteUser(client *auth.Client, uid string) error {
    err := client.DeleteUser(context.Background(), uid)
    if err != nil {
        return err
    }

    log.Printf("Successfully deleted user: %s\n", uid)
    return nil
}

まとめ

Authユーザーの一括削除は開発者にとって需要が高いと思うので、この記事が誰かの力になれたらと思います。
セキュリティ的にマズい、コードの書き方に問題がある等がありましたらコメントでご教示頂けますと幸いです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1