میتوانید به کاربران اجازه دهید با پیوند دادن اطلاعات اعتباری ارائهدهنده اصالتسنجی به حساب کاربری موجود، بااستفاده از چندین ارائهدهنده اصالتسنجی به سیستم برنامهتان وارد شوند. کاربران صرفنظر از ارائهدهنده اصالتسنجی که برای ورود به سیستم استفاده کردهاند، با همان شناسه کاربر Firebase قابلشناسایی هستند. برای مثال، کاربری که با گذرواژه به سیستم وارد شده است میتواند «حساب Google» را پیوند دهد و در آینده با هریک از این روشها به سیستم وارد شود. یا، کاربر ناشناسی میتواند حساب Facebook را پیوند دهد و سپس، بعداً با Facebook به سیستم وارد شود تا به استفاده از برنامه شما ادامه دهد.
قبل از شروع
پشتیبانی از دو یا چند ارائهدهنده اصالتسنجی (احتمالاً شامل اصالتسنجی ناشناس) را به برنامهتان اضافه کنید.
پیوند دادن اطلاعات اعتباری ارائهدهنده اصالتسنجی به حساب کاربر
برای پیوند دادن اطلاعات اعتباری ارائهدهنده اصالتسنجی به حساب کاربری موجود:
- کاربر را بااستفاده از هر روش یا ارائهدهنده اصالتسنجی به سیستم وارد کنید.
- جریان ورود به سیستم را برای ارائهدهنده اصالتسنجی جدید تا مرحله فراخوانی یکی از روشهای
firebase::auth::Auth::SignInWithCredentialتکمیل کنید، اما این مرحله را شامل نشود. برای مثال، گذرکلید Google کاربر، گذرکلید دسترسی Facebook، یا ایمیل و گذرواژه را دریافت کنید.
ورود به سیستم Googlefirebase::auth::Credentialرا برای ارائهدهنده اصالتسنجی جدید دریافت کنید: ورود به سیستم Facebookfirebase::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);
شیء
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 دسترسی پیدا کند.
لغو پیوند ارائهدهنده اصالتسنجی از حساب کاربر
یک حساب کاربری Firebase میتواند چندین ارائهدهنده اصالتسنجی پیوندشده داشته باشد (برای مثال، ایمیل/گذرواژه، Google، Facebook)، که به کاربر امکان میدهد ازطریق روشهای مختلف به همان حساب 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);
عیبیابی
اگر هنگام تلاش برای پیوند دادن چند حساب با خطا مواجه شدید، مستندات مربوط به نشانیهای ایمیل تأییدشده را ببینید.