אתם יכולים לאפשר למשתמשים להיכנס לאפליקציה שלכם באמצעות כמה ספקי אימות על ידי קישור פרטי הכניסה של ספק האימות לחשבון משתמש קיים. אפשר לזהות משתמשים באמצעות אותו מזהה משתמש ב-Firebase, בלי קשר לספק האימות שבו הם השתמשו כדי להיכנס לחשבון. לדוגמה, משתמש שנכנס באמצעות סיסמה יכול לקשר חשבון Google ולהיכנס באמצעות אחת מהשיטות האלה בעתיד. לחלופין, משתמש אנונימי יכול לקשר חשבון פייסבוק, ואז להיכנס לחשבון באמצעות פייסבוק כדי להמשיך להשתמש באפליקציה.
לפני שמתחילים
מוסיפים לאפליקציה תמיכה בשני ספקי אימות או יותר (יכול להיות שזה כולל אימות אנונימי).
קישור פרטי כניסה של ספק אימות לחשבון משתמש
כדי לקשר פרטי כניסה של ספק אימות לחשבון משתמש קיים:
- מבצעים כניסה לחשבון המשתמש באמצעות ספק או שיטת אימות כלשהם.
- משלימים את תהליך הכניסה של ספק האימות החדש עד לשלב של קריאה לאחת מהשיטות של
firebase::auth::Auth::SignInWithCredential
, אבל לא כולל השלב הזה. לדוגמה, קבלת טוקן מזהה של משתמש ב-Google, טוקן גישה בפייסבוק או כתובת אימייל וסיסמה. מקבלים
כניסה לחשבון Googlefirebase::auth::Credential
עבור ספק האימות החדש: Facebook Loginfirebase::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
של המשתמש המחובר:// 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);
פתרון בעיות
אם נתקלתם בשגיאות כשניסיתם לקשר כמה חשבונות, תוכלו לעיין במסמכים בנושא כתובות אימייל מאומתות.