קשר ספקי אימות מרובים לחשבון באמצעות C ++

באפשרותך לאפשר למשתמשים להיכנס לאפליקציה שלך באמצעות ספקי אימות מרובים על ידי קישור אישורי ספק האימות לחשבון משתמש קיים. משתמשים ניתנים לזיהוי על ידי אותו מזהה משתמש של Firebase ללא קשר לספק האימות בו השתמשו בכניסה. לדוגמה, משתמש שנכנס באמצעות סיסמה יכול לקשר חשבון Google ולהיכנס בעת ובעונה אחת בשתי השיטות. לחלופין, משתמש אנונימי יכול לקשר חשבון פייסבוק ואז, בהמשך, להיכנס עם פייסבוק כדי להמשיך להשתמש באפליקציה שלך.

לפני שאתה מתחיל

הוסף תמיכה עבור שני ספקי אימות או יותר (אולי כולל אימות אנונימי) לאפליקציה שלך.

לקישור אישורי ספק האימות לחשבון משתמש קיים:

  1. היכנס למשתמש באמצעות כל ספק או שיטת אימות.
  2. השלם את כניסת הזרימה של ספק האימות החדש עד, אך לא כולל, קורא אחד firebase::auth::Auth::SignInWithCredential השיטות. לדוגמה, קבל את אסימון מזהה Google של המשתמש, אסימון גישה לפייסבוק או דוא"ל וסיסמה.
  3. קבל firebase::auth::Credential של ספק האימות החדש:

    כניסה עם גוגל
    firebase::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);
    
  4. תעביר את 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::User*> 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::User*> result =
        auth->SignInWithCredential(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.

באפשרותך לבטל את הקישור של ספק אימות מחשבון, כך שהמשתמש לא יוכל עוד להיכנס עם אותו ספק.

לביטול קישור ספק auth מחשבון משתמש, לעבור ספק מזהה את Unlink השיטה. אתה יכול לקבל את תעודות הזהות ספקית של ספקי auth קשורה משתמש על ידי התקשרות ProviderData .

// Unlink the sign-in provider from the currently active user.
firebase::auth::User* current_user = auth->current_user();
firebase::Future<firebase::auth::User*> result =
    current_user->Unlink(providerId);