Вы можете интегрировать Firebase Authentication с собственной системой аутентификации, изменив сервер аутентификации так, чтобы он создавал специальные подписанные токены, когда пользователь успешно входит в систему. Приложение получает этот токен и использует его для аутентификации в Firebase.
Подготовка
-
Чтобы использовать Firebase Authentication, вам необходимо:
- Зарегистрируйте проект Unity в проекте Firebase.
- Добавьте в свой проект Unity Firebase Unity SDK (
FirebaseAuth.unitypackage).
Подробные инструкции по первоначальной настройке смотрите в статье Как добавить Firebase в свой проект Unity.
- Получите ключи сервера проекта:
-
В консоли Firebase перейдите на вкладку
Настройки > Сервисные аккаунты. - Внизу раздела Firebase Admin SDK нажмите Создать новый закрытый ключ.
- Пара открытого и закрытого ключей нового сервисного аккаунта автоматически сохранится на вашем компьютере. Скопируйте этот файл на сервер аутентификации.
-
В консоли Firebase перейдите на вкладку
Как пройти аутентификацию с помощью Firebase
КлассFirebaseAuth – это шлюз для всех вызовов API.
Он доступен через FirebaseAuth.DefaultInstance.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
Позвоните на номер Firebase.Auth.FirebaseAuth.SignInWithCustomTokenAsync и сообщите токен, полученный от сервера аутентификации.
- Когда пользователь входит в приложение, отправьте его учетные данные (например, имя пользователя и пароль) на сервер аутентификации. Ваш сервер проверяет учетные данные и возвращает специальный токен, если они действительны.
- Получив от сервера аутентификации специальный токен, передайте его в
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 правилах безопасности можно получить уникальный идентификатор пользователя, выполнившего вход, из переменной
authи использовать его, чтобы контролировать, к каким данным у пользователя есть доступ.
Вы можете разрешить пользователям входить в ваше приложение, используя несколько поставщиков услуг аутентификации, связав учетные данные поставщика услуг аутентификации с существующим аккаунтом пользователя.
Чтобы выйти из аккаунта пользователя, вызовите функцию
SignOut():
auth.SignOut();