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 digunakan 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 memulai
Tambahkan dukungan untuk dua penyedia autentikasi atau lebih (mungkin dengan menyertakan autentikasi anonim) ke aplikasi Anda.
Menautkan kredensial penyedia autentikasi ke akun pengguna
Untuk menautkan kredensial penyedia autentikasi ke akun pengguna yang ada:
Proses login pengguna menggunakan penyedia atau metode autentikasi apa pun.
Selesaikan alur login untuk penyedia autentikasi baru hingga, tetapi tidak termasuk, tahap pemanggilan salah satu metode
signInWith
. Misalnya, dapatkan token ID Google, token akses Facebook, atau email dan sandi pengguna.Dapatkan objek
Credential
untuk penyedia autentikasi baru:// Google Sign-in final credential = GoogleAuthProvider.credential(idToken: idToken); // Email and password sign-in final credential = EmailAuthProvider.credential(email: emailAddress, password: password); // Etc.
Teruskan objek
Credential
ke metodelinkWithCredential()
pengguna yang login: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 kini 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 dengan akun, sehingga pengguna tidak dapat login lagi dengan penyedia tersebut.
Untuk membatalkan link penyedia autentikasi dari akun pengguna, teruskan ID penyedia ke
metode unlink()
. Anda bisa mendapatkan ID penyedia dari penyedia autentikasi 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("Unknown error.");
}
}