ユーザーを作成する
次の場合に Firebase プロジェクトに新しいユーザーを作成します。
createUserWithEmailAndPassword()メソッドが呼び出されたとき。- ユーザーが Google ログイン、Facebook ログイン、Apple などのフェデレーション ID プロバイダを使用して初めてログインしたとき。
Firebase コンソールの [Authentication] セクションにある [ユーザー] ページで、新しいパスワード認証ユーザーを作成することもできます。
ユーザーのプロフィールを取得する
ユーザーのプロフィール情報を取得するには、User のプロパティを使用します。現在のユーザーを表す User オブジェクトを取得するには、次の 3 つの方法があります。
authStateChanges、idTokenChanges、userChangesストリーム: リスナーは現在のUserを受け取ります。ユーザーが認証されていない場合はnullを受け取ります。FirebaseAuth.instance .authStateChanges() .listen((User? user) { if (user != null) { print(user.uid); } });アプリが開始されると、ローカル ストレージのユーザー認証情報(ある場合)が復元された後にイベントが発生します。つまり、ユーザーの状態が初期化されると、必ずリスナーが呼び出されます。その後、認証状態が変更されるたびに、更新されたユーザー状態を通知する新しいイベントが発生します。
認証状態をリッスンすることで、これらの認証状態の変化に対応するユーザー インターフェースを構築できます。 ウィジェットの build メソッド内に
authStateChanges().listen(...)を直接配置しないでください。再ビルドのたびに新しいサブスクリプションが作成されます。認証状態に応じて UI を更新する必要がある場合は、StreamBuilderを使用します。StreamBuilder<User?>( stream: FirebaseAuth.instance.authStateChanges(), builder: (BuildContext context, AsyncSnapshot<User?> snapshot) { if (snapshot.hasError) { return const Text('Something went wrong'); } if (snapshot.connectionState == ConnectionState.waiting) { return const Text("Loading..."); } if (!snapshot.hasData) { return const SignInScreen(); } final user = snapshot.data!; return HomeScreen(userId: 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