Google I/O 2022 で発表された Firebase の最新情報をご覧ください。詳細

Firebaseでユーザーを管理する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

ユーザーを作成する

Firebaseプロジェクトに新しいユーザーを作成するには、次の4つの方法があります。

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

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

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

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

  • authStateChangesidTokenChanges 、およびuserChangesストリーム:リスナーは現在の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)をupdateできます。例えば:

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コンソールの[認証]セクションで使用されるメールテンプレートは、[メールテンプレート]ページでカスタマイズできます。 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コンソールの[認証]セクションで使用されるメールテンプレートは、[メールテンプレート]ページでカスタマイズできます。 Firebaseヘルプセンターのメールテンプレートをご覧ください。

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

さらに、電子メールを送信する前にAuthインスタンスの言語コードを更新することにより、パスワードリセット電子メールをローカライズできます。例えば:

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

Firebaseコンソールからパスワードリセットメールを送信することもできます。

ユーザーを削除する

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

await user?.delete();

Firebaseコンソールの[認証]セクションの[ユーザー]ページからユーザーを削除することもできます。

ユーザーを再認証する

アカウントの削除、メインのメールアドレスの設定、パスワードの変更など、セキュリティ上重要なアクションの中には、ユーザーが最近サインインしている必要があるものがあります。これらのアクションのいずれかを実行し、ユーザーがかなり前にサインインした場合は、アクションは失敗し、コードrequires-recent-loginFirebaseAuthExceptionをスローします。これが発生した場合は、ユーザーから新しいサインインクレデンシャルを取得し、クレデンシャルを渡して再認証することにより、ユーザーをreauthenticateします。例えば:

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

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

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

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