Firebase でユーザーを管理する

ユーザーを作成する

次の場合に Firebase プロジェクトに新しいユーザーを作成します。

  • createUserWithEmailAndPassword() メソッドが呼び出されたとき。
  • ユーザーが Google ログイン、Facebook ログイン、Apple などのフェデレーション ID プロバイダを使用して初めてログインしたとき。

Firebase コンソールの [Authentication] セクションにある [ユーザー] ページで、新しいパスワード認証ユーザーを作成することもできます。

ユーザーのプロフィールを取得する

ユーザーのプロフィール情報を取得するには、User のプロパティを使用します。現在のユーザーを表す User オブジェクトを取得するには、次の 3 つの方法があります。

  • authStateChangesidTokenChangesuserChanges ストリーム: リスナーは現在の User を受け取ります。ユーザーが認証されていない場合は null を受け取ります。

    FirebaseAuth.instance
      .authStateChanges()
      .listen((User? user) {
        if (user != null) {
          print(user.uid);
        }
      });
    

    アプリが開始されると、ローカル ストレージのユーザー認証情報(ある場合)が復元された後にイベントが発生します。つまり、ユーザーの状態が初期化されると、必ずリスナーが呼び出されます。その後、認証状態が変更されるたびに、更新されたユーザー状態を通知する新しいイベントが発生します。

    認証状態をリッスンすることで、これらの認証状態の変化に対応するユーザー インターフェースを構築できます。

  • 認証(signIn-)メソッドから返される UserCredential オブジェクト: UserCredential オブジェクトには、現在の User を含む user プロパティがあります。

    final userCredential =
        await FirebaseAuth.instance.signInWithCredential(credential);
    final user = userCredential.user;
    print(user?.uid);
    
  • FirebaseAuth インスタンスの currentUser プロパティ: ユーザーが現在ログインしていることが確かな場合は、currentUser プロパティから User にアクセスできます。

    if (FirebaseAuth.instance.currentUser != null) {
      print(FirebaseAuth.instance.currentUser?.uid);
    }
    

    currentUser は、次の 2 つの理由により null になる可能性があります。

    • ユーザーがログインしていない。
    • auth オブジェクトの初期化が完了していない。リスナーを使用してユーザーのログイン ステータスを追跡している場合は、この状況に対処する必要はありません。

ユーザーのプロバイダ別のプロフィール情報を取得する

ユーザーにリンクされているログイン プロバイダからプロフィール情報を取得する場合は、providerData プロパティを使用します。次に例を示します。

if (user != null) {
    for (final providerProfile in user.providerData) {
        // ID of the provider (google.com, apple.com, etc.)
        final provider = providerProfile.providerId;

        // UID specific to the provider
        final uid = providerProfile.uid;

        // Name, email address, and profile photo URL
        final name = providerProfile.displayName;
        final emailAddress = providerProfile.email;
        final profilePhoto = providerProfile.photoURL;
    }
}

ユーザーのプロフィールを更新する

update メソッドを使用して、ユーザーの基本的なプロフィール情報(ユーザーの表示名とプロフィール写真の URL)を更新できます。次に例を示します。

await user?.updateDisplayName("Jane Q. User");
await user?.updatePhotoURL("https://example.com/jane-q-user/profile.jpg");

ユーザーのメールアドレスを設定する

updateEmail() メソッドを使用して、ユーザーのメールアドレスを設定できます。次に例を示します。

await user?.updateEmail("janeq@example.com");

ユーザーに確認メールを送信する

sendEmailVerification() メソッドを使用して、ユーザーにアドレス確認メールを送信できます。次に例を示します。

await user?.sendEmailVerification();

Firebase コンソールの [Authentication] セクションにある [メール テンプレート] ページで使用されるメール テンプレートをカスタマイズできます。Firebase ヘルプセンターでメール テンプレートについての記事をご覧ください。

確認メールを送信するときに、続行 URL を使用して状態を渡し、アプリにリダイレクトすることもできます。

さらに、メールを送信する前に Auth インスタンスの言語コードを更新して、確認メールをローカライズすることもできます。次に例を示します。

await FirebaseAuth.instance.setLanguageCode("fr");
await user?.sendEmailVerification();

ユーザーのパスワードを設定する

updatePassword() メソッドを使用して、ユーザーのパスワードを設定できます。次に例を示します。

await user?.updatePassword(newPassword);

パスワードの再設定メールを送信する

sendPasswordResetEmail() メソッドを使用して、ユーザーにパスワードの再設定メールを送信できます。次に例を示します。

await FirebaseAuth.instance
    .sendPasswordResetEmail(email: "user@example.com");

Firebase コンソールの [Authentication] セクションにある [メール テンプレート] ページで使用されるメール テンプレートをカスタマイズできます。Firebase ヘルプセンターでメール テンプレートについての記事をご覧ください。

パスワードの再設定メールを送信するときに、続行 URL を使用して状態を渡し、アプリにリダイレクトすることもできます。

さらに、メールを送信する前に Auth インスタンスの言語コードを更新して、パスワードの再設定メールをローカライズすることもできます。次に例を示します。

await FirebaseAuth.instance.setLanguageCode("fr");

Firebase コンソールからパスワードの再設定メールを送信することもできます。

ユーザーを削除する

delete() メソッドを使用して、ユーザー アカウントを削除できます。次に例を示します。

await user?.delete();

Firebase コンソールの [Authentication] セクションにある [Users] ページでユーザーを削除することもできます。

ユーザーを再認証する

アカウントの削除メインのメールアドレスの設定パスワードの変更といったセキュリティ上重要な操作を行うには、ユーザーが最近ログインしている必要があります。ユーザーが最近ログインしていない場合、このような操作を行うと失敗し、コード requires-recent-login を含む FirebaseAuthException がスローされます。このような場合は、ユーザーから新しいログイン認証情報を取得して reauthenticate に渡し、ユーザーを再認証します。次に例を示します。

// Prompt the user to re-provide their sign-in credentials.
// Then, use the credentials to reauthenticate:
await user?.reauthenticateWithCredential(credential);

ユーザー アカウントをインポートする

ユーザー アカウントをファイルから Firebase プロジェクトにインポートするには、Firebase CLI の auth:import コマンドを使用します。次に例を示します。

firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14