Uwierzytelniaj za pomocą Firebase za pomocą kont opartych na haśle za pomocą Unity

Za pomocą usługi Firebase Authentication możesz umożliwić użytkownikom uwierzytelnianie się w Firebase przy użyciu adresów e-mail i haseł oraz zarządzać kontami w aplikacji, które są chronione hasłem.

Zanim zaczniesz

Zanim zaczniesz korzystać z usługi Firebase Authentication, musisz:

  • zarejestrować projekt w Unity i skonfigurować go pod kątem korzystania z Firebase.

    • Jeśli Twój projekt w Unity korzysta już z Firebase, jest on już zarejestrowany i skonfigurowany pod kątem Firebase.

    • Jeśli nie masz projektu w Unity, możesz pobrać przykładową aplikację.

  • dodać pakiet Firebase Unity SDK (konkretnie FirebaseAuth.unitypackage) do projektu w Unity.

Pamiętaj, że dodanie Firebase do projektu w Unity wymaga wykonania zadań zarówno w Firebase konsoli jak i w otwartym projekcie w Unity (np. pobierasz pliki konfiguracyjne Firebase z konsoli, a następnie przenosisz je do projektu w Unity).

Dostęp do zajęć Firebase.Auth.FirebaseAuth

Klasa FirebaseAuth jest bramą do wszystkich wywołań interfejsu API. Jest ona dostępna przez FirebaseAuth.DefaultInstance.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

Tworzenie konta chronionego hasłem

Aby utworzyć nowe konto użytkownika z hasłem, wykonaj te czynności w kodzie logowania aplikacji:

  1. Gdy nowy użytkownik zarejestruje się za pomocą formularza rejestracji w Twojej aplikacji, wykonaj wszystkie kroki weryfikacji nowego konta wymagane przez aplikację, np. sprawdź, czy hasło do nowego konta zostało wpisane prawidłowo i czy spełnia Twoje wymagania dotyczące złożoności.
  2. Utwórz nowe konto, przekazując adres e-mail i hasło nowego użytkownika do 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.AuthResult result = task.Result;
      Debug.LogFormat("Firebase user created successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });

Logowanie użytkownika za pomocą adresu e-mail i hasła

Czynności związane z logowaniem użytkownika za pomocą hasła są podobne do czynności związanych z tworzeniem nowego konta. W funkcji logowania aplikacji wykonaj te czynności:

  1. Gdy użytkownik zaloguje się w Twojej aplikacji, przekaż jego adres e-mail i hasło do 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.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });
  2. Możesz też utworzyć dane logowania i zalogować się tak jak w innych procesach:
    Firebase.Auth.Credential credential =
        Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
    auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });

Zalecane: ustawienie zasad dotyczących haseł

Możesz zwiększyć bezpieczeństwo kont, egzekwując wymagania dotyczące złożoności haseł.

Aby skonfigurować zasady dotyczące haseł w projekcie, otwórz sekcję Zasady dotyczące haseł na karcie Bezpieczeństwo > Uwierzytelnianie > Ustawienia w konsoli Firebase:

Ustawienia uwierzytelniania

Firebase Authentication zasady dotyczące haseł obsługują te wymagania dotyczące haseł:

  • Wymagany jest znak pisany małą literą.

  • Wymagany jest znak pisany wielką literą.

  • Wymagany jest znak numeryczny.

  • Wymagany jest znak niealfanumeryczny.

    Wymaganie dotyczące znaku niealfanumerycznego spełniają te znaki: ^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~

  • Minimalna długość hasła (od 6 do 30 znaków; domyślnie 6).

  • Maksymalna długość hasła (maksymalnie 4096 znaków).

Egzekwowanie zasad dotyczących haseł możesz włączyć w 2 trybach:

  • Wymagaj: próby rejestracji nie powiodą się, dopóki użytkownik nie zmieni hasła na zgodne z zasadami.

  • Powiadom: użytkownicy mogą się zarejestrować za pomocą hasła niezgodnego z zasadami. W tym trybie musisz sprawdzić, czy hasło użytkownika jest zgodne z zasadami po stronie klienta, i w jakiś sposób poprosić użytkownika o zaktualizowanie hasła, jeśli nie jest ono zgodne z zasadami.

Nowi użytkownicy zawsze muszą wybrać hasło zgodne z Twoimi zasadami.

Jeśli masz aktywnych użytkowników, zalecamy, aby nie włączać wymuszonej aktualizacji przy logowaniu, chyba że chcesz zablokować dostęp użytkownikom, których hasła nie są zgodne z Twoimi zasadami. Zamiast tego użyj trybu powiadamiania, który umożliwia użytkownikom logowanie się za pomocą bieżących haseł, i poinformuj ich o wymaganiach, których ich hasła nie spełniają.

Zalecane: włączenie ochrony przed wyliczaniem adresów e-mail

Niektóre Firebase Authentication metody, które przyjmują adresy e-mail jako parametry, zgłaszają określone błędy, jeśli adres e-mail jest niezarejestrowany, gdy powinien być zarejestrowany (np. podczas logowania się za pomocą adresu e-mail i hasła), lub zarejestrowany gdy powinien być nieużywany (np. podczas zmiany adresu e-mail użytkownika). Może to być przydatne do sugerowania użytkownikom konkretnych rozwiązań, ale może też zostać wykorzystane przez złośliwych użytkowników do odkrywania adresów e-mail zarejestrowanych przez Twoich użytkowników.

Aby zmniejszyć to ryzyko, zalecamy włączenie ochrony przed wyliczaniem adresów e-mail w projekcie za pomocą narzędzia Google Cloud gcloud. Pamiętaj, że włączenie tej funkcji zmienia sposób raportowania błędów przez usługę Firebase Authentication. Upewnij się, że Twoja aplikacja nie korzysta z bardziej szczegółowych błędów.

Następne kroki

Gdy użytkownik zaloguje się po raz pierwszy, zostanie utworzone nowe konto użytkownika i połączone z danymi logowania – nazwą użytkownika i hasłem, numerem telefonu lub informacjami o dostawcy uwierzytelniania – za pomocą których użytkownik się zalogował. To nowe konto jest przechowywane w ramach Twojego projektu w Firebase i może służyć do identyfikowania użytkownika w każdej aplikacji w projekcie, niezależnie od sposobu logowania.

  • W aplikacjach możesz uzyskać podstawowe informacje o profilu użytkownika z Firebase.Auth.FirebaseUser obiektu:

    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;
    }
  • W regułach bezpieczeństwa Firebase Realtime Database i Cloud Storage bazy danych czasu rzeczywistego Firebase i Cloud Storage, możesz uzyskać unikalny identyfikator zalogowanego użytkownika z zmiennej auth, i użyć go do kontrolowania, do jakich danych użytkownik może mieć dostęp.

Możesz zezwolić użytkownikom na logowanie się w aplikacji za pomocą wielu dostawców uwierzytelniania przez połączenie danych logowania dostawcy uwierzytelniania z istniejącym kontem użytkownika.

Aby wylogować użytkownika, wywołaj SignOut():

auth.SignOut();