میتوانید به کاربران اجازه دهید با استفاده از چندین ارائهدهنده احراز هویت، با پیوند دادن اعتبار ارائهدهنده تأیید اعتبار به یک حساب کاربری موجود، به برنامه شما وارد شوند. کاربران بدون توجه به ارائهدهنده احراز هویتی که برای ورود به سیستم استفاده کردهاند با همان شناسه کاربر Firebase قابل شناسایی هستند. برای مثال، کاربری که با رمز ورود وارد شده است میتواند یک حساب Google را پیوند داده و در آینده با هر روشی وارد سیستم شود. یا، یک کاربر ناشناس میتواند یک حساب فیسبوک را پیوند دهد و بعداً برای ادامه استفاده از برنامه شما، با فیسبوک وارد شود.
قبل از اینکه شروع کنی
پشتیبانی از دو یا چند ارائه دهنده احراز هویت (احتمالاً احراز هویت ناشناس) را به برنامه خود اضافه کنید.
اعتبار ارائه دهنده تأیید اعتبار را به یک حساب کاربری پیوند دهید
برای پیوند دادن اطلاعات کاربری ارائهدهنده تأیید اعتبار به یک حساب کاربری موجود:
- با استفاده از هر ارائه دهنده یا روش احراز هویت، کاربر را وارد کنید.
- جریان ورود به سیستم ارائهدهنده احراز هویت جدید را تا فراخوانی یکی از روشهای
firebase::auth::Auth::SignInWithCredential
، تکمیل کنید. به عنوان مثال، کد Google ID کاربر، رمز دسترسی فیس بوک، یا ایمیل و رمز عبور کاربر را دریافت کنید. یک
Google Sign-Infirebase::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);
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);