Kimlik doğrulama sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak, kullanıcıların birden fazla kimlik doğrulama sağlayıcısı kullanarak uygulamanızda oturum açmasına izin verebilirsiniz. Kullanıcılar, oturum açmak için kullandıkları kimlik doğrulama sağlayıcısından bağımsız olarak aynı Firebase kullanıcı kimliğiyle tanımlanabilir. Örneğin, bir şifreyle oturum açan bir kullanıcı, bir Google hesabını bağlayabilir ve gelecekte herhangi bir yöntemle oturum açabilir. Veya anonim bir kullanıcı bir Facebook hesabını bağlayabilir ve daha sonra uygulamanızı kullanmaya devam etmek için Facebook ile oturum açabilir.
Sen başlamadan önce
Uygulamanıza iki veya daha fazla kimlik doğrulama sağlayıcısı (muhtemelen anonim kimlik doğrulama dahil) için destek ekleyin.
FirebaseAuth
sınıfı, tüm API çağrıları için ağ geçididir. FirebaseAuth.DefaultInstance aracılığıyla erişilebilir.Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
Kimlik doğrulama sağlayıcı kimlik bilgilerini bir kullanıcı hesabına bağlama
Kimlik doğrulama sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlamak için:
- Herhangi bir kimlik doğrulama sağlayıcısı veya yöntemi kullanarak kullanıcının oturumunu açın.
- Yeni kimlik doğrulama sağlayıcısı için oturum açma akışını
Firebase.Auth.FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync
yöntemlerinden birini çağırana kadar tamamlayın (bu dahil değil). Örneğin, kullanıcının Google Kimliği jetonunu, Facebook erişim jetonunu veya e-posta ve şifresini alın. Yeni kimlik doğrulama sağlayıcısı için bir
Google GirişiFirebase.Auth.Credential
alın:Firebase.Auth.Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken);
Facebook GirişiFirebase.Auth.Credential credential = Firebase.Auth.FacebookAuthProvider.GetCredential(accessToken);
E-posta-şifre girişFirebase.Auth.Credential credential = Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
Firebase.Auth.Credential
nesnesini oturum açmış kullanıcınınLinkWithCredentialAsync
yöntemine iletin:auth.CurrentUser.LinkWithCredentialAsync(credential).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("LinkWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("LinkWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("Credentials successfully linked to Firebase user: {0} ({1})", result.User.DisplayName, result.User.UserId); });
Kimlik bilgileri zaten başka bir kullanıcı hesabına bağlıysa,
LinkWithCredentialAsync
çağrısı başarısız olur. Bu durumda, hesapları ve ilişkili verileri birleştirmeyi uygulamanız için uygun şekilde ele almalısınız:// Gather data for the currently signed in User. string currentUserId = auth.CurrentUser.UserId; string currentEmail = auth.CurrentUser.Email; string currentDisplayName = auth.CurrentUser.DisplayName; System.Uri currentPhotoUrl = auth.CurrentUser.PhotoUrl; // Sign in with the new credentials. 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); // TODO: Merge app specific details using the newUser and values from the // previous user, saved above. });
LinkWithCredentialAsync
çağrısı başarılı olursa, kullanıcı artık herhangi bir bağlı kimlik doğrulama sağlayıcısını kullanarak oturum açabilir ve aynı Firebase verilerine erişebilir.
Bir kullanıcı hesabından bir kimlik doğrulama sağlayıcısının bağlantısını kaldırma
Bir kimlik doğrulama sağlayıcısının bağlantısını bir hesaptan kaldırabilirsiniz, böylece kullanıcı artık o sağlayıcıyla oturum açamaz.
Bir kimlik doğrulama sağlayıcısının kullanıcı hesabıyla bağlantısını kaldırmak için sağlayıcı kimliğini UnlinkAsync
yöntemine iletin. Bir kullanıcıya bağlı auth sağlayıcılarının sağlayıcı kimliklerini ProviderData
çağırarak alabilirsiniz.
// Unlink the sign-in provider from the currently active user. // providerIdString is a string identifying a provider, // retrieved via FirebaseAuth.FetchProvidersForEmail(). auth.CurrentUser.UnlinkAsync(providerIdString).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("UnlinkAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("UnlinkAsync encountered an error: " + task.Exception); return; } // The user has been unlinked from the provider. Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("Credentials successfully unlinked from user: {0} ({1})", result.User.DisplayName, result.User.UserId); });