Catch up on everthing we announced at this year's Firebase Summit. Learn more

Unity'deki Bir Hesaba Birden Çok Kimlik Doğrulama Sağlayıcısı Bağlayın

Kimlik doğrulama sağlayıcısı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak, kullanıcıların birden çok 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 şifre ile oturum açan bir kullanıcı, gelecekte bir Google hesabını bağlayabilir ve herhangi bir yöntemle oturum açabilir. Veya anonim bir kullanıcı bir Facebook hesabını bağlayabilir ve ardından 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 kapıdır. Bu ulaşılabiliyor FirebaseAuth.DefaultInstance .
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

Yetkilendirme sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlamak için:

  1. Herhangi bir kimlik doğrulama sağlayıcısı veya yöntemi kullanarak kullanıcıda oturum açın.
  2. Kadar oturum açma yeni kimlik doğrulama sağlayıcısı için akış tamamlayın, ancak birini çağırarak, dahil değil Firebase.Auth.FirebaseAuth.SignInWithCredentialAsync yöntemlerle. Örneğin, kullanıcının Google ID jetonunu, Facebook erişim jetonunu veya e-posta ve şifresini alın.
  3. Bir alın Firebase.Auth.Credential yeni kimlik doğrulama sağlayıcısı için:

    Google Oturum Açma
    Firebase.Auth.Credential credential =
        Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken);
    
    Facebook Giriş
    Firebase.Auth.Credential credential =
        Firebase.Auth.FacebookAuthProvider.GetCredential(accessToken);
    
    Email-şifre oturum açma
    Firebase.Auth.Credential credential =
        Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
    
  4. Geçiş Firebase.Auth.Credential nesneyi Oturum açan kullanıcının LinkWithCredentialAsync yöntemiyle:

    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.FirebaseUser newUser = task.Result;
      Debug.LogFormat("Credentials successfully linked to Firebase user: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    });
    

    Çağrısı LinkWithCredentialAsync kimlik bilgileri zaten başka bir kullanıcı hesabına bağlı olup olmadığını başarısız olur. Bu durumda, uygulamanız için uygun olan hesapları ve ilişkili verileri birleştirmeyi 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.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    
      // TODO: Merge app specific details using the newUser and values from the
      // previous user, saved above.
    });
    

Çağrısı Eğer LinkWithCredentialAsync başarılı, kullanıcı artık herhangi bir bağlı kimlik doğrulama sağlayıcı ve erişim aynı Firebase verilerini kullanarak oturum açabilirsiniz.

Bir kimlik doğrulama sağlayıcısının bir hesapla bağlantısını kaldırabilirsiniz, böylece kullanıcı artık o sağlayıcıyla oturum açamaz.

Bir kullanıcı hesabından yetkilendirme sağlayıcı bağlantısını kaldırmak için sağlayıcı numarası geçmesi UnlinkAsync yöntemi. Sen arayarak bir kullanıcıya bağlı yetkilendirme sağlayıcılarının sağlayıcı kimliklerini alabilirsiniz ProviderData .

// 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.FirebaseUser newUser = task.Result;
  Debug.LogFormat("Credentials successfully unlinked from user: {0} ({1})",
      newUser.DisplayName, newUser.UserId);
});