Flutter でパスワード ベースのアカウントを使用して Firebase 認証を行う

Firebase Authentication を使用すると、ユーザーが Firebase での認証にメールアドレスとパスワードを使用できるようになります。

始める前に

  1. まだ行っていない場合は、スタートガイドの手順に沿って操作してください。

  2. メールアドレスとパスワードによるログインを有効にします。

    • Firebase コンソールの [Authentication] セクションで、[ログイン方法] ページを開きます。
    • [ログイン方法] ページで [Email/password sign-in] を有効にして、[保存] をクリックします。

パスワード ベースのアカウントを作成する

パスワードを使用して新しいユーザー アカウントを作成するには、createUserWithEmailAndPassword() メソッドを呼び出します。

try {   final credential = await FirebaseAuth.instance.createUserWithEmailAndPassword(     email: emailAddress,     password: password,   ); } on FirebaseAuthException catch (e) {   if (e.code == 'weak-password') {     print('The password provided is too weak.');   } else if (e.code == 'email-already-in-use') {     print('The account already exists for that email.');   } } catch (e) {   print(e); } 

通常、この操作はアプリの登録画面から行います。新しいユーザーがアプリの登録フォームを使用して登録したら、アプリで必要な新しいアカウントの検証手順(新しいアカウントのパスワードが正しく入力されていることや、パスワードの複雑さの要件を満たしているかの確認など)を行います。

新しいアカウントが正常に作成されると、ユーザーのログインも行われます。認証状態の変化をリッスンしている場合、新しいイベントがリスナーに送信されます。

新しいアカウントを作成する際のフォローアップとして、ユーザーのメールアドレスを確認できます。

メールアドレスとパスワードを使用してユーザーのログインを行う

パスワードを使用したユーザーのログイン手順は、新しいアカウントの作成手順と似ています。アプリのログイン画面から signInWithEmailAndPassword() を呼び出します。

try {   final credential = await FirebaseAuth.instance.signInWithEmailAndPassword(     email: emailAddress,     password: password   ); } on FirebaseAuthException catch (e) {   if (e.code == 'user-not-found') {     print('No user found for that email.');   } else if (e.code == 'wrong-password') {     print('Wrong password provided for that user.');   } } 

次のステップ

ユーザーが作成した新しいアカウントは Firebase プロジェクトの一部として保存されます。このアカウントは、ユーザーが使用するログイン方法に関係なく、プロジェクトのすべてのアプリでユーザーの識別に使用できます。

アプリでは、User オブジェクトからユーザーの基本的なプロフィール情報を取得します。ユーザーを管理するをご覧ください。

Firebase Realtime Database と Cloud Storage のセキュリティ ルールでは、ログイン済みユーザーの一意のユーザー ID を auth 変数から取得し、それを使用して、ユーザーがアクセス可能なデータを制御できます。

既存のユーザー アカウントに認証プロバイダの認証情報をリンクすることで、ユーザーは複数の認証プロバイダを使用してアプリにログインできるようになります。

ユーザーのログアウトを行うには、signOut() を呼び出します。

await FirebaseAuth.instance.signOut();