Lihat yang baru dari Firebase di Google I/O 2022. Pelajari lebih lanjut

Tautkan Beberapa Penyedia Otentikasi ke Akun

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Anda dapat mengizinkan pengguna masuk ke aplikasi Anda menggunakan beberapa penyedia autentikasi dengan menautkan kredensial penyedia autentikasi ke akun pengguna yang ada. Pengguna dapat diidentifikasi dengan ID pengguna Firebase yang sama terlepas dari penyedia autentikasi yang mereka gunakan untuk masuk. Misalnya, pengguna yang masuk dengan sandi dapat menautkan akun Google dan masuk dengan salah satu metode di masa mendatang. Atau, pengguna anonim dapat menautkan akun Facebook dan kemudian, masuk dengan Facebook untuk terus menggunakan aplikasi Anda.

Sebelum kamu memulai

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

Untuk menautkan kredensial penyedia autentikasi ke akun pengguna yang ada:

  1. Masuk pengguna menggunakan penyedia atau metode otentikasi apa pun.

  2. Selesaikan alur masuk untuk penyedia autentikasi baru hingga, tetapi tidak termasuk, memanggil salah satu metode signInWith -. Misalnya, dapatkan token ID Google pengguna, token akses Facebook, atau email dan kata sandi.

  3. Dapatkan objek Credential untuk penyedia otentikasi baru:

    // Google Sign-in
    final credential = GoogleAuthProvider.credential(idToken: idToken);
    
    // Email and password sign-in
    final credential =
        EmailAuthProvider.credential(email: emailAddress, password: password);
    
    // Etc.
    
  4. Teruskan objek Credential ke metode linkWithCredential() pengguna yang masuk:

    try {
      final userCredential = await FirebaseAuth.instance.currentUser
          ?.linkWithCredential(credential);
    } on FirebaseAuthException catch (e) {
      switch (e.code) {
        case "provider-already-linked":
          print("The provider has already been linked to the user.");
          break;
        case "invalid-credential":
          print("The provider's credential is not valid.");
          break;
        case "credential-already-in-use":
          print("The account corresponding to the credential already exists, "
              "or is already linked to a Firebase User.");
          break;
        // See the API reference for the full list of error codes.
        default:
          print("Unknown error.");
      }
      ```
    

Jika panggilan ke linkWithCredential() berhasil, pengguna sekarang dapat masuk menggunakan penyedia autentikasi tertaut dan mengakses data Firebase yang sama.

Anda dapat memutuskan tautan penyedia autentikasi dari akun, sehingga pengguna tidak dapat lagi masuk dengan penyedia tersebut.

Untuk memutuskan tautan penyedia autentikasi dari akun pengguna, teruskan ID penyedia ke metode unlink() . Anda bisa mendapatkan ID penyedia dari penyedia auth yang ditautkan ke pengguna dari properti providerData objek User .

try {
  await FirebaseAuth.instance.currentUser?.unlink(providerId);
} on FirebaseAuthException catch (e) {
  switch (e.code) {
    case "no-such-provider":
      print("The user isn't linked to the provider or the provider "
          "doesn't exist.");
      break;
    default:
      print("Unkown error.");
  }
}