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

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

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

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

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

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

    Google Sign-In
    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 دسترسی داشته باشد.

می‌توانید پیوند یک ارائه‌دهنده تأیید اعتبار را از یک حساب لغو کنید تا کاربر دیگر نتواند با آن ارائه‌دهنده وارد شود.

برای لغو پیوند یک ارائه دهنده تأیید اعتبار از یک حساب کاربری، شناسه ارائه دهنده را به روش 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);