Możesz pozwolić użytkownikom na uwierzytelnianie w Firebase przy użyciu dostawców OAuth, takich jak Microsoft Azure Active Directory, integrując internetowe ogólne logowanie OAuth ze swoją aplikacją za pomocą pakietu SDK Firebase w celu przeprowadzenia kompleksowego procesu logowania. Ponieważ ten przepływ wymaga użycia zestawów SDK Firebase na telefon, jest obsługiwany tylko na platformach Android i Apple.
Zanim zaczniesz
Zanim będziesz mógł skorzystać z uwierzytelniania Firebase , musisz:
Zarejestruj swój projekt Unity i skonfiguruj go do korzystania z Firebase.
Jeśli Twój projekt Unity korzysta już z Firebase, oznacza to, że jest już zarejestrowany i skonfigurowany dla Firebase.
Jeśli nie masz projektu Unity, możesz pobrać przykładową aplikację .
Dodaj pakiet SDK Firebase Unity (w szczególności
FirebaseAuth.unitypackage
) do swojego projektu Unity.
Pamiętaj, że dodanie Firebase do projektu Unity obejmuje zadania zarówno w konsoli Firebase , jak i w otwartym projekcie Unity (na przykład pobierasz pliki konfiguracyjne Firebase z konsoli, a następnie przenosisz je do projektu Unity).
Uzyskaj dostęp do klasy Firebase.Auth.FirebaseAuth
Klasa FirebaseAuth
jest bramą dla wszystkich wywołań API. Jest dostępny poprzez FirebaseAuth.DefaultInstance .Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
Obsługuj proces logowania za pomocą pakietu SDK Firebase
Aby obsłużyć proces logowania za pomocą pakietu SDK Firebase, wykonaj następujące kroki:
Utwórz instancję
FederatedOAuthProviderData
skonfigurowaną z identyfikatorem dostawcy odpowiednim dla firmy Microsoft.Firebase.Auth.FederatedOAuthProviderData providerData = new Firebase.Auth.FederatedOAuthProviderData(); providerData.ProviderId = Firebase.Auth.MicrosoftAuthProvider.ProviderId;
Opcjonalnie : określ dodatkowe niestandardowe parametry OAuth, które chcesz wysłać z żądaniem OAuth.
providerData.CustomParameters = new Dictionary<string,string>; // Prompt user to re-authenticate to Microsoft. providerData.CustomParameters.Add("prompt", "login"); // Target specific email with login hint. providerData.CustomParameters.Add("login_hint", "user@firstadd.onmicrosoft.com");
Informacje na temat parametrów obsługiwanych przez firmę Microsoft można znaleźć w dokumentacji Microsoft OAuth . Pamiętaj, że nie możesz przekazywać parametrów wymaganych przez Firebase za pomocą
setCustomParameters()
. Te parametry to id_klienta , typ_odpowiedzi , redirect_uri , stan , zakres i tryb_odpowiedzi .Aby zezwolić tylko użytkownikom z określonej dzierżawy usługi Azure AD na logowanie się do aplikacji, można użyć przyjaznej nazwy domeny dzierżawy usługi Azure AD lub identyfikatora GUID dzierżawy. Można tego dokonać poprzez określenie pola „najemca” w obiekcie parametrów niestandardowych.
// Optional "tenant" parameter in case you are using an Azure AD tenant. // eg. '8eaef023-2b34-4da1-9baa-8bc8c9d6a490' or 'contoso.onmicrosoft.com' // or "common" for tenant-independent tokens. // The default value is "common". providerData.CustomParameters.Add("tenant", "TENANT_ID");
Opcjonalnie : określ dodatkowe zakresy protokołu OAuth 2.0 poza profilem podstawowym, o które chcesz poprosić dostawcę uwierzytelniania.
providerData.Scopes = new List<string>(); providerData.Scopes.Add("mail.read"); providerData.Scopes.Add("calendars.read");
Aby dowiedzieć się więcej, zapoznaj się z dokumentacją dotyczącą uprawnień i zgód firmy Microsoft .
Po skonfigurowaniu danych dostawcy użyj ich do utworzenia FederatedOAuthProvider.
// Construct a FederatedOAuthProvider for use in Auth methods. Firebase.Auth.FederatedOAuthProvider provider = new Firebase.Auth.FederatedOAuthProvider(); provider.SetProviderData(providerData);
Uwierzytelnij się w Firebase przy użyciu obiektu dostawcy uwierzytelniania. Pamiętaj, że w przeciwieństwie do innych operacji FirebaseAuth, ta przejmie kontrolę nad Twoim interfejsem użytkownika, wyświetlając widok internetowy, w którym użytkownik może wprowadzić swoje dane uwierzytelniające.
Aby rozpocząć proces logowania, wywołaj
SignInAndRetrieveDataWithCredentialAsync
:auth.SignInWithProviderAsync(provider).ContinueOnMainThread(task => { if (task.IsCanceled) { Debug.LogError("SignInWithProviderAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInWithProviderAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult authResult = task.Result; Firebase.Auth.FirebaseUser user = authResult.User; Debug.LogFormat("User signed in successfully: {0} ({1})", user.DisplayName, user.UserId); });
Korzystając z tokena dostępu OAuth, możesz wywołać interfejs API Microsoft Graph .
W przeciwieństwie do innych dostawców obsługiwanych przez Firebase Auth, firma Microsoft nie podaje adresu URL zdjęcia, zamiast tego należy poprosić o dane binarne zdjęcia profilowego za pośrednictwem interfejsu API Microsoft Graph .
Chociaż powyższe przykłady skupiają się na przepływach logowania, istnieje również możliwość połączenia dostawcy Microsoft Azure Active Directory z istniejącym użytkownikiem przy użyciu
LinkWithProviderAsync
. Na przykład możesz powiązać wielu dostawców z tym samym użytkownikiem, umożliwiając im logowanie się za pomocą dowolnego z nich.user.LinkWithProviderAsync(provider).ContinueOnMainThread(task => { if (task.IsCanceled) { Debug.LogError("LinkWithProviderAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("LinkWithProviderAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult authResult = task.Result; Firebase.Auth.FirebaseUser user = authResult.User; Debug.LogFormat("User linked successfully: {0} ({1})", user.DisplayName, user.UserId); });
Tego samego wzorca można użyć w przypadku
ReauthenticateWithProviderAsync
, którego można użyć do pobrania nowych poświadczeń dla poufnych operacji wymagających niedawnego logowania.user.ReauthenticateWithProviderAsync(provider).ContinueOnMainThread(task => { if (task.IsCanceled) { Debug.LogError("ReauthenticateWithProviderAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError( "ReauthenticateWithProviderAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult authResult = task.Result; Firebase.Auth.FirebaseUser user = authResult.User; Debug.LogFormat("User reauthenticated successfully: {0} ({1})", user.DisplayName, user.UserId); });
Następne kroki
Gdy użytkownik zaloguje się po raz pierwszy, zostanie utworzone nowe konto użytkownika i powiązane z poświadczeniami — czyli 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 jako część Twojego projektu Firebase i może służyć do identyfikowania użytkownika w każdej aplikacji w Twoim projekcie, niezależnie od tego, w jaki sposób użytkownik się loguje.
W Twoich aplikacjach możesz uzyskać podstawowe informacje o profilu użytkownika z obiektu
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; }
W regułach bezpieczeństwa bazy danych Firebase Realtime i Cloud Storage możesz uzyskać unikalny identyfikator zalogowanego użytkownika ze zmiennej
auth
i użyć go do kontrolowania, do jakich danych użytkownik może uzyskać dostęp.
Możesz zezwolić użytkownikom na logowanie się do aplikacji przy użyciu wielu dostawców uwierzytelniania, łącząc poświadczenia dostawcy uwierzytelniania z istniejącym kontem użytkownika.
Aby wylogować użytkownika, wywołaj SignOut()
:
auth.SignOut();