Аутентификация с помощью Firebase с использованием специальной системы аутентификации и Unity.

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

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

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

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

    Подробные инструкции по этим шагам начальной настройки вы найдете в разделе «Добавление Firebase в ваш проект Unity» .

  2. Получите ключи сервера вашего проекта:
    1. Перейдите на страницу учетных записей служб в настройках вашего проекта.
    2. Нажмите «Создать новый закрытый ключ» в нижней части раздела Firebase Admin SDK на странице «Учетные записи служб» .
    3. Пара открытого и закрытого ключей новой учетной записи службы автоматически сохраняется на вашем компьютере. Скопируйте этот файл на свой сервер аутентификации.

Аутентификация с помощью Firebase

Класс FirebaseAuth является шлюзом для всех вызовов API. Он доступен через FirebaseAuth.DefaultInstance .
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

Вызовите Firebase.Auth.FirebaseAuth.SignInWithCustomTokenAsync с помощью токена с вашего сервера аутентификации.

  1. Когда пользователи входят в ваше приложение, отправляйте свои учетные данные для входа (например, имя пользователя и пароль) на ваш сервер аутентификации. Ваш сервер проверяет учетные данные и возвращает пользовательский токен, если они действительны.
  2. После того как вы получите пользовательский токен от вашего сервера аутентификации, передайте его Firebase.Auth.FirebaseAuth.SignInWithCustomTokenAsync для входа пользователя:
    auth.SignInWithCustomTokenAsync(custom_token).ContinueWith(task => {
     
    if (task.IsCanceled) {
       
    Debug.LogError("SignInWithCustomTokenAsync was canceled.");
       
    return;
     
    }
     
    if (task.IsFaulted) {
       
    Debug.LogError("SignInWithCustomTokenAsync 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.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 Firebase вы можете получить уникальный идентификатор пользователя, вошедшего в систему, из переменной auth и использовать его для управления тем, к каким данным пользователь может получить доступ.

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

Чтобы выйти из системы, вызовите SignOut() :

auth.SignOut();