Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

קשר ספקי אימות מרובים לחשבון באמצעות 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);