Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。

Unityを使用してパスワードベースのアカウントを使用してFirebaseで認証する

Firebase Authentication を使用すると、ユーザーがメール アドレスとパスワードを使用して Firebase で認証できるようにし、アプリのパスワード ベースのアカウントを管理できます。

あなたが始める前に

Firebase Authenticationを使用する前に、次のことを行う必要があります。

  • Unity プロジェクトを登録し、Firebase を使用するように構成します。

    • Unity プロジェクトですでに Firebase を使用している場合は、Firebase 用に既に登録および構成されています。

    • Unity プロジェクトがない場合は、サンプル アプリをダウンロードできます。

  • Unity プロジェクトにFirebase Unity SDK (具体的にはFirebaseAuth.unitypackage ) を追加します。

Unity プロジェクトに Firebase を追加するには、 Firebase コンソールと開いている Unity プロジェクトの両方でタスクが必要になることに注意してください (たとえば、コンソールから Firebase 構成ファイルをダウンロードして、それらを Unity プロジェクトに移動します)。

Firebase.Auth.FirebaseAuthクラスにアクセスする

FirebaseAuthクラスは、すべての API 呼び出しのゲートウェイです。 FirebaseAuth.DefaultInstanceからアクセスできます。
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

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

パスワードを使用して新しいユーザー アカウントを作成するには、アプリのサインイン コードで次の手順を実行します。

  1. 新しいユーザーがアプリのサインアップ フォームを使用してサインアップするときは、新しいアカウントのパスワードが正しく入力され、複雑さの要件を満たしていることを確認するなど、アプリで必要な新しいアカウントの検証手順を完了します。
  2. 新しいユーザーのメール アドレスとパスワードをFirebaseAuth.CreateUserWithEmailAndPasswordに渡して、新しいアカウントを作成します:
    auth.CreateUserWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("CreateUserWithEmailAndPasswordAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("CreateUserWithEmailAndPasswordAsync encountered an error: " + task.Exception);
        return;
      }
    
      // Firebase user has been created.
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("Firebase user created successfully: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    });
    

メールアドレスとパスワードを使用してユーザーにサインインする

パスワードを使用してユーザーをサインインする手順は、新しいアカウントを作成する手順と似ています。アプリのサインイン機能で、次の操作を行います。

  1. ユーザーがアプリにサインインするときに、ユーザーのメール アドレスとパスワードをFirebaseAuth.SignInWithEmailAndPasswordに渡します:
    auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithEmailAndPasswordAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithEmailAndPasswordAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    });
    
  2. 資格情報を作成して、他のワークフローと同様にサインインすることもできます:
    Firebase.Auth.Credential credential =
        Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
    auth.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    });
    

推奨: メール列挙保護を有効にする

メール アドレスをパラメータとして受け取る一部の Firebase Authentication メソッドでは、登録が必要なときにメール アドレスが登録されていない場合 (たとえば、メール アドレスとパスワードを使用してサインインする場合)、または未使用である必要があるときに登録された場合 (たとえば、ユーザーのメールアドレスを変更する場合)。これは、ユーザーに特定の救済策を提案するのに役立ちますが、悪意のあるアクターが悪用して、ユーザーが登録した電子メール アドレスを発見することもできます。

このリスクを軽減するには、Google Cloud のgcloudツールを使用して、プロジェクトのメール列挙保護を有効にすることをお勧めします。この機能を有効にすると、Firebase Authentication のエラー報告の動作が変わることに注意してください。アプリがより具体的なエラーに依存していないことを確認してください。

次のステップ

ユーザーが初めてサインインすると、新しいユーザー アカウントが作成され、サインインに使用したユーザーの資格情報 (ユーザー名とパスワード、電話番号、または認証プロバイダー情報) にリンクされます。この新しいアカウントは Firebase プロジェクトの一部として保存され、ユーザーのサインイン方法に関係なく、プロジェクト内のすべてのアプリでユーザーを識別するために使用できます。

  • アプリでは、 Firebase.Auth.FirebaseUserオブジェクトからユーザーの基本的なプロフィール情報を取得できます。

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // The user's Id, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server, if you
      // have one; use User.TokenAsync() instead.
      string uid = user.UserId;
    }
    
  • Firebase Realtime Database と Cloud Storageセキュリティ ルールでは、サインインしているユーザーの一意のユーザー ID をauth変数から取得し、それを使用してユーザーがアクセスできるデータを制御できます。

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

ユーザーをサインアウトするには、 SignOut()を呼び出します。

auth.SignOut();