Kimlik doğrulama sağlayıcısı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak, kullanıcıların birden çok kimlik doğrulama sağlayıcısı kullanarak uygulamanızda oturum açmasına izin verebilirsiniz. Kullanıcılar, oturum açmak için kullandıkları kimlik doğrulama sağlayıcısından bağımsız olarak aynı Firebase kullanıcı kimliğiyle tanımlanabilir. Örneğin, bir şifre ile oturum açan bir kullanıcı, gelecekte bir Google hesabını bağlayabilir ve herhangi bir yöntemle oturum açabilir. Veya anonim bir kullanıcı bir Facebook hesabını bağlayabilir ve ardından uygulamanızı kullanmaya devam etmek için Facebook ile oturum açabilir.
Sen başlamadan önce
Uygulamanıza iki veya daha fazla kimlik doğrulama sağlayıcısı (muhtemelen anonim kimlik doğrulama dahil) için destek ekleyin.
Kimlik doğrulama sağlayıcısı kimlik bilgilerini bir kullanıcı hesabına bağlayın
Yetkilendirme sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlamak için:
- Herhangi bir kimlik doğrulama sağlayıcısı veya yöntemi kullanarak kullanıcıda oturum açın.
- Yeni kimlik doğrulama sağlayıcısı için oturum açma akışını,
firebase::auth::Auth::SignInWithCredential
yöntemlerinden birini çağırmaya kadar tamamlayın. Örneğin, kullanıcının Google ID jetonunu, Facebook erişim jetonunu veya e-posta ve şifresini alın. Yeni kimlik doğrulama sağlayıcısı için bir
Google Girişi l10nfirebase::auth::Credential
alın:firebase::auth::Credential credential = firebase::auth::GoogleAuthProvider::GetCredential(google_id_token, nullptr);
Facebook Girişifirebase::auth::Credential credential = firebase::auth::FacebookAuthProvider::GetCredential(access_token);
E-posta-şifre girişifirebase::auth::Credential credential = firebase::auth::EmailAuthProvider::GetCredential(email, password);
firebase::auth::Credential
nesnesini oturum açmış kullanıcınınLinkWithCredential
yöntemine iletin:// 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);
Kimlik bilgileri zaten başka bir kullanıcı hesabına bağlıysa,
LinkWithCredential
çağrısı başarısız olur. Bu durumda, uygulamanız için uygun olan hesapları ve ilişkili verileri birleştirmeyi ele almalısınız:// 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
çağrısı başarılı olursa, kullanıcı artık herhangi bir bağlantılı kimlik doğrulama sağlayıcısını kullanarak oturum açabilir ve aynı Firebase verilerine erişebilir.
Bir kullanıcı hesabından bir auth sağlayıcısının bağlantısını kaldırın
Bir kimlik doğrulama sağlayıcısının bir hesapla bağlantısını kaldırabilirsiniz, böylece kullanıcı artık o sağlayıcıyla oturum açamaz.
Bir kimlik doğrulama sağlayıcısının bir kullanıcı hesabıyla Unlink
kaldırmak için sağlayıcı kimliğini Bağlantıyı Kaldır yöntemine iletin. ProviderData
öğesini çağırarak bir kullanıcıya bağlı olan auth sağlayıcılarının sağlayıcı kimliklerini alabilirsiniz.
// 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);