אפשר לאפשר למשתמשים להיכנס לאפליקציה באמצעות מספר סוגי אימות על ידי קישור פרטי הכניסה של ספק האימות לחשבון משתמש קיים. ניתן לזהות את המשתמשים לפי אותו מזהה משתמש ב-Firebase, ללא קשר ספק האימות ששימש לכניסה. לדוגמה, משתמש שנכנס לחשבון עם סיסמה יכולים לקשר חשבון Google ולהיכנס בכל אחת מהשיטות העתידי. לחלופין, משתמש אנונימי יכול לקשר חשבון Facebook, ולאחר מכן להיכנס לחשבון מחובר ל-Facebook כדי להמשיך להשתמש באפליקציה שלך.
לפני שמתחילים
הוספת תמיכה לשני ספקי אימות או יותר (כולל תמיכה) לאימות אנונימי) באפליקציה.
קישור פרטי הכניסה של ספק האימות לחשבון משתמש
כדי לקשר את פרטי הכניסה של ספק האימות לחשבון משתמש קיים:
- מזינים את פרטי הכניסה של המשתמש באמצעות כל ספק או שיטה של אימות.
- משלימים את תהליך הכניסה של ספק האימות החדש, עד להפעלה של אחת מהשיטות
firebase::auth::Auth::SignInWithCredential
, אבל לא כולל אותה. לדוגמה, אפשר לקבל אסימון מזהה Google, אסימון הגישה ל-Facebook, כתובת האימייל והסיסמה של המשתמש. קבלת
כניסה באמצעות חשבון Googlefirebase::auth::Credential
לספק האימות החדש: התחברות ל-Facebookfirebase::auth::Credential credential = firebase::auth::GoogleAuthProvider::GetCredential(google_id_token, nullptr);
כניסה באמצעות סיסמה לאימיילfirebase::auth::Credential credential = firebase::auth::FacebookAuthProvider::GetCredential(access_token);
firebase::auth::Credential credential = firebase::auth::EmailAuthProvider::GetCredential(email, password);
מעבירים את האובייקט
firebase::auth::Credential
אל המשתמש המחוברLinkWithCredential
method:// Link the new credential to the currently active user. firebase::auth::User current_user = auth->current_user(); firebase::Future<firebase::auth::AuthResult> result = current_user.LinkWithCredential(credential);
הקריאה אל
LinkWithCredential
תיכשל אם פרטי הכניסה מקושר כבר לחשבון משתמש אחר. במקרה כזה, עליכם למזג את החשבונות ואת הנתונים המשויכים בהתאם לאפליקציה שלכם:// 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::AuthResult> result = auth->SignInAndRetrieveDataWithCredential(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; }
אם הקריאה אל LinkWithCredential
תתבצע בהצלחה, המשתמש יוכל להיכנס עכשיו באמצעות
לכל ספק אימות מקושר, ולגשת לאותם נתוני Firebase.
ביטול הקישור של ספק אימות לחשבון משתמש
ניתן לבטל את הקישור של ספק אימות לחשבון, כך שהמשתמש לא יוכל להיכנס לחשבון עם הספק הזה.
כדי לבטל את הקישור של ספק הרשאה לחשבון משתמש, צריך להעביר את מזהה הספק אל
אמצעי תשלום אחד (Unlink
). אפשר לקבל את מזהי הספקים של ספקי ההרשאות
מקושר למשתמש באמצעות קריאה ל-
ProviderData
// Unlink the sign-in provider from the currently active user. firebase::auth::User current_user = auth->current_user(); firebase::Future<firebase::auth::AuthResult> result = current_user.Unlink(providerId);