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.
ClassFirebaseAuth
adalah gateway untuk semua panggilan API.
Class ini dapat diakses melalui FirebaseAuth.DefaultInstance .
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
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
Firebase.Auth.FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync
. Misalnya, dapatkan token ID Google, token akses Facebook, atau email dan sandi pengguna. Dapatkan
Login dengan GoogleFirebase.Auth.Credential
untuk penyedia autentikasi baru:Firebase.Auth.Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken);
Login dengan FacebookFirebase.Auth.Credential credential = Firebase.Auth.FacebookAuthProvider.GetCredential(accessToken);
Login dengan email-sandiFirebase.Auth.Credential credential = Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
Teruskan
Firebase.Auth.Credential
objek ke metode pengguna yangLinkWithCredentialAsync
login: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); });
Panggilan ke
LinkWithCredentialAsync
akan gagal jika kredensial sudah ditautkan ke akun pengguna lain. Dalam situasi ini, Anda harus menangani penggabungan akun dan data terkait dengan cara yang sesuai untuk aplikasi Anda:// 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. });
Jika panggilan ke LinkWithCredentialAsync
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 tautan penyedia autentikasi dari akun pengguna, teruskan ID penyedia ke metode UnlinkAsync
. Anda bisa mendapatkan ID penyedia dari penyedia
autentikasi yang ditautkan ke pengguna dengan memanggil
ProviderData
.
// 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); });