Аутентификация в Firebase с использованием учетных записей на основе пароля с использованием Unity

Вы можете использовать Firebase Authentication , чтобы разрешить вашим пользователям проходить аутентификацию в Firebase, используя свои адреса электронной почты и пароли, а также управлять учетными записями вашего приложения на основе паролей.

Прежде чем начать

Прежде чем использовать Firebase Authentication , вам необходимо:

  • Зарегистрируйте свой проект Unity и настройте его для использования Firebase.

    • Если ваш проект Unity уже использует Firebase, значит, он уже зарегистрирован и настроен для Firebase.

    • Если у вас нет проекта Unity, вы можете загрузить пример приложения .

  • Добавьте Firebase Unity SDK (в частности, FirebaseAuth.unitypackage ) в ваш проект Unity.

Обратите внимание, что добавление Firebase в ваш проект Unity включает в себя выполнение задач как в консоли 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.AuthResult result = task.Result;
      Debug.LogFormat("Firebase user created successfully: {0} ({1})",
          result.User.DisplayName, result.User.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.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });
  2. Вы также можете создать учетные данные и войти в систему, как и в других рабочих процессах:
    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);
    });

Рекомендуется: установить политику паролей

Вы можете повысить безопасность учетной записи, установив требования к сложности пароля.

Чтобы настроить политику паролей для вашего проекта, откройте вкладку «Политика паролей» на странице «Параметры аутентификации» консоли Firebase :

Настройки аутентификации

Политики паролей Firebase Authentication поддерживают следующие требования к паролям:

  • Требуется строчная буква

  • Требуется заглавный символ

  • Требуется числовой символ

  • Требуется небуквенно-цифровой символ

    Следующие символы удовлетворяют требованию не быть буквенно-цифровыми: ^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~

  • Минимальная длина пароля (от 6 до 30 символов; по умолчанию — 6)

  • Максимальная длина пароля (максимальная длина 4096 символов)

Вы можете включить принудительное применение политики паролей в двух режимах:

  • Требовать : попытки зарегистрироваться будут безуспешными до тех пор, пока пользователь не обновит пароль, соответствующий вашей политике.

  • Уведомление : пользователям разрешено регистрироваться с несоответствующим паролем. При использовании этого режима необходимо проверить пароль пользователя на стороне клиента на соответствие политике и каким-либо образом предложить пользователю обновить пароль, если он не соответствует.

Новым пользователям всегда необходимо выбирать пароль, соответствующий вашей политике.

Если у вас есть активные пользователи, мы рекомендуем не включать принудительное обновление при входе, если только вы не собираетесь блокировать доступ пользователям, чьи пароли не соответствуют вашей политике. Вместо этого используйте режим уведомлений, который позволяет пользователям входить в систему с их текущими паролями, и сообщайте им о требованиях, которым не соответствует их пароль.

Рекомендуется: включить защиту от перечисления адресов электронной почты

Некоторые методы 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 вы можете получить уникальный идентификатор вошедшего в систему пользователя из переменной auth и использовать его для управления данными, к которым пользователь может получить доступ.

Вы можете разрешить пользователям входить в ваше приложение с использованием нескольких поставщиков аутентификации, связав учетные данные поставщика аутентификации с существующей учетной записью пользователя.

Чтобы выйти из системы пользователя, вызовите SignOut() :

auth.SignOut();