چندین ارائه دهنده تأیید اعتبار را با استفاده از C++ به یک حساب پیوند دهید

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

قبل از شروع

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

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

  1. با استفاده از هر ارائه دهنده یا روش احراز هویت، کاربر را وارد کنید.
  2. جریان ورود به سیستم ارائه‌دهنده احراز هویت جدید را تا فراخوانی یکی از روش‌های firebase::auth::Auth::SignInWithCredential تکمیل کنید. به عنوان مثال، رمز Google ID کاربر، رمز دسترسی فیس بوک یا ایمیل و رمز عبور را دریافت کنید.
  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::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);