ユーザーを作成する
次の場合に 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); } });
アプリが開始されると、ローカル ストレージのユーザー認証情報(ある場合)が復元された後にイベントが発生します。つまり、ユーザーの状態が初期化されると、必ずリスナーが呼び出されます。その後、認証状態が変更されるたびに、更新されたユーザー状態を通知する新しいイベントが発生します。
認証状態をリッスンすることで、これらの認証状態の変化に対応するユーザー インターフェースを構築できます。
認証(
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