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

Kimlik doğrulama sağlayıcısı 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, şifreyle oturum açan bir kullanıcı, bir Google hesabını bağlayabilir ve gelecekte bu yöntemlerden herhangi birini kullanarak 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'ta 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ının ağ geçididir. FirebaseAuth.DefaultInstance aracılığıyla erişilebilir.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

Kimlik doğrulama sağlayıcısı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlamak için:

  1. Herhangi bir kimlik doğrulama sağlayıcısını veya yöntemini kullanarak kullanıcının oturumunu açın.
  2. 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 (bu dahil değil) tamamlayın. Örneğin, kullanıcının Google Kimliği jetonunu, Facebook erişim jetonunu veya e-postasını ve şifresini alın.
  3. Yeni kimlik doğrulama sağlayıcısı için bir Firebase.Auth.Credential edinin:

    Google Oturum Açma
    Firebase.Auth.Credential credential =
        Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken);
    
    Facebook Oturum Açma
    Firebase.Auth.Credential credential =
        Firebase.Auth.FacebookAuthProvider.GetCredential(accessToken);
    
    E-posta-şifre ile oturum açma
    Firebase.Auth.Credential credential =
        Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
    
  4. Firebase.Auth.Credential nesnesini oturum açmış kullanıcının LinkWithCredentialAsync 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ştirme işlemini uygulamanıza uygun şekilde gerçekleştirmelisiniz:

    // 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ğlantılı kimlik doğrulama sağlayıcısını kullanarak oturum açabilir ve aynı Firebase verilerine erişebilir.

Kullanıcının artık o sağlayıcıda oturum açamaması için, bir kimlik doğrulama sağlayıcısının bir hesapla olan bağlantısını kaldırabilirsiniz.

Bir kimlik doğrulama sağlayıcısının kullanıcı hesabıyla olan bağlantısını kaldırmak için sağlayıcı kimliğini UnlinkAsync yöntemine iletin. ProviderData öğesini çağırarak bir kullanıcıya bağlı kimlik doğrulama sağlayıcılarının sağlayıcı kimliklerini 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);
});