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 ++ چندین ارائه دهنده تأیید خود را به یک حساب پیوند دهید

شما می توانید با پیوند اعتبارنامه های ارائه دهنده Author به یک حساب کاربری موجود ، به کاربران اجازه دهید با استفاده از چندین ارائه دهنده احراز هویت به برنامه شما وارد شوند. کاربران بدون توجه به ارائه دهنده احراز هویتی که از آنها برای ورود به سیستم استفاده کرده اند ، با همان شناسه کاربری Firebase قابل شناسایی هستند. به عنوان مثال ، کاربری که با رمز عبور وارد شده است می تواند حساب Google را پیوند داده و در آینده با هر دو روش وارد سیستم شود. یا ، یک کاربر ناشناس می تواند یک حساب فیس بوک را پیوند دهد و سپس ، بعداً ، برای ادامه استفاده از برنامه خود ، وارد فیس بوک شود.

قبل از اینکه شروع کنی

پشتیبانی از دو یا چند ارائه دهنده احراز هویت (احتمالاً شامل احراز هویت ناشناس) را به برنامه خود اضافه کنید.

برای پیوند اعتبارنامه ارائه دهنده نویس به حساب کاربری موجود:

  1. با استفاده از هر ارائه دهنده یا روش احراز هویت ، وارد سیستم شوید.
  2. کامل جریان ورود به سیستم برای ارائه دهنده احراز هویت جدید تا، اما نه از جمله، خواستار یکی از firebase::auth::Auth::SignInWithCredential روش. به عنوان مثال ، گوگل شناسه کاربر ، رمز دسترسی فیس بوک یا ایمیل و رمز عبور را دریافت کنید.
  3. یک firebase::auth::Credential برای ارائه دهنده احراز هویت جدید:

    Google وارد شوید
    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 موفق شود، کاربران هم اکنون می توانید با استفاده از هر ارائه دهنده احراز هویت در ارتباط و دسترسی به داده فایربیس همان را امضا کنید.

می توانید پیوند ارائه دهنده نویس را از یک حساب پیوند دهید ، بنابراین کاربر دیگر نمی تواند با آن ارائه دهنده وارد سیستم شود.

برای قطع ارتباط ارائه دهنده تایید از یک حساب کاربری، تصویب ID ارائه دهنده به Unlink روش. شما می توانید شناسه ارائه ارائه دهندگان تایید مرتبط به یک کاربر با تماس گرفتن 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);