C++ kullanarak bir hesaba birden çok kimlik doğrulama sağlayıcı bağlama

Kullanıcıların çoklu kimlik doğrulama kullanarak uygulamanızda oturum açmasına izin verebilirsiniz kimlik doğrulama sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak Kullanıcılar, kimlik doğrulama sağlayıcısından ödeme alınır. Örneğin, Yeşil Ofis'in web sitesinde bir Google hesabını bağlayabilir ve duymuş olabilirsiniz. Alternatif olarak, anonim bir kullanıcı bir Facebook hesabını bağlayıp daha sonra uygulamanızı kullanmaya devam etmek için Facebook'ta oturum açın.

Başlamadan önce

İki veya daha fazla kimlik doğrulama sağlayıcı için destek ekleyin ( anonim kimlik doğrulama) ekleyebilirsiniz.

Kimlik doğrulama 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ının oturumunu açın.
  2. Yeni kimlik doğrulama sağlayıcı için oturum açma akışını en fazla tamamlayın ancak Örneğin, firebase::auth::Auth::SignInWithCredential yöntemlerinden birini çağırın. Örneğin, Kullanıcının Google kimliği jetonu, Facebook erişim jetonu veya e-postası ve şifresi.
  3. Yeni kimlik doğrulama sağlayıcı için bir firebase::auth::Credential alın:

    Google ile Oturum Açma
    firebase::auth::Credential credential =
        firebase::auth::GoogleAuthProvider::GetCredential(google_id_token,
                                                          nullptr);
    
    Facebook'a Giriş
    firebase::auth::Credential credential =
        firebase::auth::FacebookAuthProvider::GetCredential(access_token);
    
    E-posta şifresiyle 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 cihazına iletin. LinkWithCredential yöntemi:

    // Link the new credential to the currently active user.
    firebase::auth::User current_user = auth->current_user();
    firebase::Future<firebase::auth::AuthResult> result =
        current_user.LinkWithCredential(credential);
    

    Kimlik bilgileri aşağıdaki gibiyse LinkWithCredential çağrısı başarısız olur başka bir kullanıcı hesabına bağlı. Böyle bir durumda, hesapları ve ilişkili verileri uygulamanıza uygun şekilde birleştirme:

    // Gather data for the currently signed in User.
    firebase::auth::User current_user = auth->current_user();
    std::string current_email = current_user.email();
    std::string current_provider_id = current_user.provider_id();
    std::string current_display_name = current_user.display_name();
    std::string current_photo_url = current_user.photo_url();
    
    // Sign in with the new credentials.
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInAndRetrieveDataWithCredential(credential);
    
    // To keep example simple, wait on the current thread until call completes.
    while (result.status() == firebase::kFutureStatusPending) {
      Wait(100);
    }
    
    // The new User is now active.
    if (result.error() == firebase::auth::kAuthErrorNone) {
      firebase::auth::User* new_user = *result.result();
    
      // Merge new_user with the user in details.
      // ...
      (void)new_user;
    }
    

LinkWithCredential çağrısı başarılı olursa kullanıcı artık ve aynı Firebase verilerine erişmelerini isteyebilir.

Bir kimlik doğrulama sağlayıcı ile hesap arasındaki bağlantıyı kaldırabilirsiniz. Böylece, kullanıcı daha uzun süre oturum açmanızı sağlar.

Bir kimlik doğrulama sağlayıcının kullanıcı hesabıyla olan bağlantısını kaldırmak için sağlayıcı kimliğini Unlink yöntemini çağırın. Kimlik doğrulama sağlayıcılarının sağlayıcı kimliklerini alabilirsiniz. numaralı telefondan bir kullanıcıya bağlandı ProviderData değerleridir.

// Unlink the sign-in provider from the currently active user.
firebase::auth::User current_user = auth->current_user();
firebase::Future<firebase::auth::AuthResult> result =
    current_user.Unlink(providerId);