אפשר לאפשר למשתמשים להיכנס לאפליקציה באמצעות מספר סוגי אימות על ידי קישור פרטי הכניסה של ספק האימות לחשבון משתמש קיים. אפשר לזהות משתמשים באמצעות אותו מזהה משתמש ב-Firebase, ללא קשר לספק האימות שבו הם השתמשו כדי להיכנס. לדוגמה, משתמש שנכנס באמצעות סיסמה יכול לקשר חשבון Google ולהיכנס באמצעות כל אחת מהשיטות בעתיד. לחלופין, משתמש אנונימי יכול לקשר חשבון Facebook, ולאחר מכן להיכנס לחשבון מחובר ל-Facebook כדי להמשיך להשתמש באפליקציה שלך.
לפני שמתחילים
הוספת תמיכה לשני ספקי אימות או יותר (כולל תמיכה) לאימות אנונימי) באפליקציה.
המחלקהFirebaseAuth
היא השער לכל הקריאות ל-API.
אפשר לגשת אליו דרך FirebaseAuth.DefaultInstance.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
קישור פרטי הכניסה של ספק האימות לחשבון משתמש
כדי לקשר פרטי כניסה של ספק אימות לחשבון משתמש קיים:
- מזינים את פרטי הכניסה של המשתמש באמצעות כל ספק או שיטה של אימות.
- להשלים את תהליך הכניסה עבור ספק האימות החדש עד, אבל לא
כולל, קריאה לאחת מהשיטות של
Firebase.Auth.FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync
. לדוגמה, אפשר לקבל אסימון מזהה Google, אסימון הגישה ל-Facebook, כתובת האימייל והסיסמה של המשתמש. קבלת
כניסה באמצעות חשבון GoogleFirebase.Auth.Credential
לספק האימות החדש: כניסה באמצעות חשבון FacebookFirebase.Auth.Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken);
כניסה באמצעות סיסמה לאימיילFirebase.Auth.Credential credential = Firebase.Auth.FacebookAuthProvider.GetCredential(accessToken);
Firebase.Auth.Credential credential = Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
מעבירים את האובייקט
Firebase.Auth.Credential
אל המשתמש המחוברLinkWithCredentialAsync
method: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); });
הקריאה ל-
LinkWithCredentialAsync
תיכשל אם פרטי הכניסה כבר מקושרים לחשבון משתמש אחר. במצב כזה, צריך לטפל מיזוג בין החשבונות והנתונים המשויכים בהתאם לאפליקציה:// 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. });
אם הקריאה ל-LinkWithCredentialAsync
תצליח, המשתמש יוכל להיכנס לחשבון באמצעות כל ספק אימות מקושר ולגשת לאותם נתונים ב-Firebase.
ביטול הקישור של ספק אימות לחשבון משתמש
ניתן לבטל את הקישור של ספק אימות לחשבון, כך שהמשתמש לא יוכל להיכנס לחשבון עם הספק הזה.
כדי לבטל את הקישור של ספק הרשאה לחשבון משתמש, צריך להעביר את מזהה הספק אל
אמצעי תשלום אחד (UnlinkAsync
). כדי לקבל את מזהי הספקים של ספקי האימות שמקושרים למשתמש, צריך להפעיל את הפונקציה 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); });