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ı 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, şifreyle oturum açan bir kullanıcı, bir Google hesabını bağlayabilir ve gelecekte her iki yöntemle de oturum açabilir. Alternatif olarak, anonim bir kullanıcı bir Facebook hesabını 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ı (muhtemelen anonim kimlik doğrulama dahil) desteği ekleyin.
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,
FirebaseAuth.signInWith
yöntemlerinden birini çağırarak en fazla (dahil değil) oturum açma akışını tamamlayın. Örneğin, kullanıcının Google kimliği jetonunu, Facebook erişim jetonunu veya e-posta adresini ve şifresini alabilirsiniz. Yeni kimlik doğrulama sağlayıcı için bir
AuthCredential
alın:Google ile Oturum Açma
Kotlin+KTX
val credential = GoogleAuthProvider.getCredential(googleIdToken, null)
Java
AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
Facebook'a Giriş
Kotlin+KTX
val credential = FacebookAuthProvider.getCredential(token.token)
Java
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
E-posta şifresiyle oturum açma
Kotlin+KTX
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+KTX
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 zaten 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 birleştirme işlemini uygulamanız için uygun şekilde yapmanız gerekir:Kotlin+KTX
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ıyı kullanarak oturum açabilir ve aynı Firebase verilerine erişebilir.
Yetkilendirme sağlayıcı ile kullanıcı hesabı arasındaki bağlantıyı kaldırma
Kimlik doğrulama sağlayıcının bir hesapla bağlantısını kaldırabilirsiniz. Böylece, kullanıcı artık bu sağlayıcıda oturum açamaz.
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. Bir kullanıcıya bağlanan kimlik doğrulama sağlayıcılarının sağlayıcı kimliklerini
getProviderData
çağrısı yaparak alabilirsiniz.
Kotlin+KTX
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 // ... } } });