Menautkan Beberapa Penyedia Autentikasi ke Akun Menggunakan C++

Anda dapat mengizinkan pengguna untuk login ke aplikasi Anda menggunakan beberapa penyedia autentikasi, dengan menautkan kredensial penyedia autentikasi ke akun pengguna yang ada. Pengguna bisa diidentifikasi dengan ID pengguna Firebase yang sama, apa pun penyedia autentikasi yang mereka gunakan untuk login. Misalnya, pengguna yang login dengan sandi bisa menautkan akun Google dan login dengan salah satu metode tersebut di lain waktu. Atau, seorang pengguna anonim bisa menautkan akun Facebook, kemudian login dengan Facebook untuk melanjutkan penggunaan aplikasi Anda.

Sebelum Anda memulai

Tambahkan dukungan untuk dua penyedia autentikasi atau lebih (mungkin dengan menyertakan autentikasi anonim) ke aplikasi Anda.

Menghubungkan kredensial penyedia autentikasi ke akun pengguna

Untuk menautkan kredensial penyedia autentikasi ke akun pengguna yang ada:

  1. Login sebagai pengguna dengan menggunakan penyedia atau metode autentikasi yang dipilih.
  2. Selesaikan alur login untuk penyedia autentikasi yang baru hingga, tetapi tidak termasuk, tahap pemanggilan salah satu metode firebase::auth::Auth::SignInWithCredential. Misalnya, dapatkan token ID Google, token akses Facebook, atau alamat email dan sandi pengguna.
  3. Dapatkan firebase::auth::Credential untuk penyedia autentikasi yang baru:

    Login dengan Google
    firebase::auth::Credential credential =
        firebase::auth::GoogleAuthProvider::GetCredential(google_id_token,
                                                          nullptr);
    
    Login dengan Facebook
    firebase::auth::Credential credential =
        firebase::auth::FacebookAuthProvider::GetCredential(access_token);
    
    Login dengan email-sandi
    firebase::auth::Credential credential =
        firebase::auth::EmailAuthProvider::GetCredential(email, password);
    
  4. Teruskan objek firebase::auth::Credential ke metode LinkWithCredential pengguna yang login:

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

    Panggilan ke LinkWithCredential akan gagal jika kredensial sudah ditautkan ke akun pengguna lain. Dalam situasi ini, Anda harus menangani penggabungan akun dan data terkait yang sesuai untuk aplikasi Anda:

    // 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::User*> result =
        auth->SignInWithCredential(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;
    }
    

Jika panggilan ke LinkWithCredential berhasil, pengguna dapat login menggunakan penyedia autentikasi yang ditautkan dan mengakses data Firebase yang sama.

Membatalkan tautan penyedia autentikasi dari akun pengguna

Anda dapat membatalkan tautan penyedia autentikasi dari akun, sehingga pengguna tidak dapat login lagi dengan penyedia tersebut.

Untuk membatalkan tautan penyedia autentikasi dari akun pengguna, teruskan ID penyedia ke metode Unlink. Anda dapat memperoleh ID penyedia milik penyedia autentikasi yang terhubung ke pengguna dengan memanggil ProviderData.

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

Kirim masukan tentang...

Butuh bantuan? Kunjungi halaman dukungan kami.