Kimlik doğrulama sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak kullanıcıların birden fazla kimlik doğrulama sağlayıcıyı 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ıdan bağımsız olarak aynı Firebase kullanıcı kimliğiyle tanımlanabilir. Örneğin, şifreyle oturum açan bir kullanıcı Google Hesabı bağlayabilir ve gelecekte her iki yöntemle de oturum açabilir. Alternatif olarak, anonim bir kullanıcı Facebook hesabı bağlayabilir ve daha sonra uygulamanızı kullanmaya devam etmek için Facebook ile oturum açabilir.
Başlamadan önce
Uygulamanıza iki veya daha fazla kimlik doğrulama sağlayıcısı için destek ekleyin (anonim kimlik doğrulama da dahil olabilir).
Kimlik doğrulama sağlayıcı kimlik bilgilerini kullanıcı hesabına bağlama
Kimlik doğrulama 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ının oturumunu 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ğırma işlemi hariç olmak üzere tamamlayın. Örneğin, kullanıcının Google kimlik jetonunu, Facebook erişim jetonunu veya e-posta adresini ve şifresini alabilirsiniz. Yeni kimlik doğrulama sağlayıcı için
Google ile oturum açmafirebase::auth::Credential
alın: Facebook ile Girişfirebase::auth::Credential credential = firebase::auth::GoogleAuthProvider::GetCredential(google_id_token, nullptr);
E-posta ve şifreyle oturum açmafirebase::auth::Credential credential = firebase::auth::FacebookAuthProvider::GetCredential(access_token);
firebase::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::AuthResult> result = current_user.LinkWithCredential(credential);
Kimlik bilgileri başka bir kullanıcı hesabına zaten bağlıysa
LinkWithCredential
ile yapılan görüşme başarısız olur. Bu durumda, hesapları ve ilişkili verileri uygulamanıza uygun şekilde birleştirmeniz gerekir:// 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
çağrısı başarılı olursa kullanıcı artık bağlı kimlik doğrulama sağlayıcılarından herhangi birini kullanarak oturum açabilir ve aynı Firebase verilerine erişebilir.
Bir kimlik doğrulama sağlayıcısının kullanıcı hesabıyla bağlantısını kaldırma
Kullanıcının artık bu sağlayıcıyla oturum açamaması için bir kimlik doğrulama sağlayıcısının bağlantısını hesaptan kaldırabilirsiniz.
Bir kimlik doğrulama sağlayıcısının bağlantısını kullanıcı hesabından kaldırmak için sağlayıcı kimliğini Unlink
yöntemine iletin. Bir kullanıcıya bağlı kimlik doğrulama sağlayıcılarının sağlayıcı kimliklerini
ProviderData
numaralı telefonu arayarak alabilirsiniz.
// 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);
Sorun giderme
Birden fazla hesabı bağlamaya çalışırken hatalarla karşılaşırsanız doğrulanmış e-posta adresleriyle ilgili dokümanlara göz atın.