Kullanıcıların çoklu kimlik doğrulama kullanarak uygulamanızda oturum açmasına izin verebilirsiniz kimlik doğrulama sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak Kullanıcılar, kimlik doğrulama sağlayıcısından ödeme alınır. Örneğin, Yeşil Ofis'in web sitesinde bir Google hesabını bağlayabilir ve duymuş olabilirsiniz. Alternatif olarak, anonim bir kullanıcı bir Facebook hesabını bağlayıp daha sonra uygulamanızı kullanmaya devam etmek için Facebook'ta oturum açın.
Başlamadan önce
İki veya daha fazla kimlik doğrulama sağlayıcı için destek ekleyin ( anonim kimlik doğrulama) ekleyebilirsiniz.
Yetkilendirme sağlayıcı kimlik bilgilerini bir kullanıcı hesabına bağla
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ı için oturum açma akışını en fazla tamamlayın ancak
Örneğin,
firebase::auth::Auth::SignInWithCredential
yöntemlerinden birini çağırın. Örneğin, Kullanıcının Google kimliği jetonu, Facebook erişim jetonu veya e-postası ve şifresi. Yeni kimlik doğrulama sağlayıcı için bir
Google ile Oturum Açmafirebase::auth::Credential
alın: Facebook'a Girişfirebase::auth::Credential credential = firebase::auth::GoogleAuthProvider::GetCredential(google_id_token, nullptr);
E-posta şifresiyle 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ın cihazına iletin.LinkWithCredential
yöntemi:// 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 aşağıdaki gibiyse
LinkWithCredential
çağrısı başarısız olur başka bir kullanıcı hesabına bağlı. Böyle bir durumda, hesapları ve ilişkili verileri uygulamanıza uygun şekilde birleştirme:// 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
ve aynı Firebase verilerine erişmelerini isteyebilir.
Yetkilendirme sağlayıcı ile kullanıcı hesabı arasındaki bağlantıyı kaldırma
Bir kimlik doğrulama sağlayıcı ile hesap arasındaki bağlantıyı kaldırabilirsiniz. Böylece, kullanıcı daha uzun süre oturum açmanızı sağlar.
Bir kimlik doğrulama sağlayıcının kullanıcı hesabıyla olan bağlantısını kaldırmak için sağlayıcı kimliğini
Unlink
yöntemini çağırın. Kimlik doğrulama sağlayıcılarının sağlayıcı kimliklerini alabilirsiniz.
numaralı telefondan bir kullanıcıya bağlandı
ProviderData
değerleridir.
// 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);