Kimlik doğrulama sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak kullanıcıların uygulamanızda birden fazla kimlik doğrulama sağlayıcı kullanarak 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ı, bir Google Hesabı bağlayabilir ve gelecekte bu iki yöntemden herhangi biriyle oturum açabilir. Anonim bir kullanıcı, bir 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ı (anonim kimlik doğrulaması dahil olabilir) desteği ekleyin.
Kimlik doğrulama sağlayıcısı kimlik bilgilerini bir 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ını veya yöntemini kullanarak kullanıcının oturumunu açın.
- Yeni kimlik doğrulama sağlayıcının oturum açma akışını,
FirebaseAuth.signInWith
yöntemlerinden birini çağırmayı içermeyecek şekilde tamamlayın. Örneğin, kullanıcının Google kimlik jetonunu, Facebook erişim jetonunu veya e-posta ve şifresini alın. Yeni kimlik doğrulama sağlayıcı için bir
AuthCredential
alın:Google ile Oturum Açma
Kotlin
val credential = GoogleAuthProvider.getCredential(googleIdToken, null)
Java
AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
Facebook Giriş
Kotlin
val credential = FacebookAuthProvider.getCredential(token.token)
Java
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
E-posta ve şifreyle oturum açma
Kotlin
val credential = EmailAuthProvider.getCredential(email, password)
Java
AuthCredential credential = EmailAuthProvider.getCredential(email, password);
AuthCredential
nesnesini oturum açmış kullanıcınınlinkWithCredential
yöntemine iletin:Kotlin
auth.currentUser!!.linkWithCredential(credential) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { Log.d(TAG, "linkWithCredential:success") val user = task.result?.user updateUI(user) } else { Log.w(TAG, "linkWithCredential:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT, ).show() updateUI(null) } }
Java
mAuth.getCurrentUser().linkWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { Log.d(TAG, "linkWithCredential:success"); FirebaseUser user = task.getResult().getUser(); updateUI(user); } else { Log.w(TAG, "linkWithCredential:failure", task.getException()); Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } } });
Kimlik bilgileri başka bir kullanıcı hesabına bağlıysa
linkWithCredential
çağrısı başarısız olur. Bu durumda, hesapları ve ilişkili verileri uygulamanıza uygun şekilde birleştirme işlemini yapmanız gerekir:Kotlin
val prevUser = auth.currentUser auth.signInWithCredential(credential) .addOnSuccessListener { result -> val currentUser = result.user // Merge prevUser and currentUser accounts and data // ... } .addOnFailureListener { // ... }
Java
FirebaseUser prevUser = FirebaseAuth.getInstance().getCurrentUser(); mAuth.signInWithCredential(credential) .addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { FirebaseUser currentUser = task.getResult().getUser(); // Merge prevUser and currentUser accounts and data // ... } });
linkWithCredential
çağrısı başarılı olursa kullanıcı artık bağlı herhangi bir kimlik doğrulama sağlayıcısını kullanarak oturum açabilir ve aynı Firebase verilerine erişebilir.
Kimlik doğrulama sağlayıcının kullanıcı hesabıyla olan bağlantısını kaldırma
Kullanıcının artık bu sağlayıcıyla oturum açmaması için bir kimlik doğrulama sağlayıcının hesapla bağlantısını kaldırabilirsiniz.
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öntemine iletin.
getProviderData
işlevini çağırarak bir kullanıcıya bağlı kimlik doğrulama sağlayıcılarının sağlayıcı kimliklerini alabilirsiniz.
Kotlin
Firebase.auth.currentUser!!.unlink(providerId) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Auth provider unlinked from account // ... } }
Java
mAuth.getCurrentUser().unlink(providerId) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Auth provider unlinked from account // ... } } });