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
val credential = GoogleAuthProvider.getCredential(googleIdToken, null)
AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
Facebook Giriş
val credential = FacebookAuthProvider.getCredential(token.token)
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
E-posta ve şifreyle oturum açma
val credential = EmailAuthProvider.getCredential(email, password)
AuthCredential credential = EmailAuthProvider.getCredential(email, password);
AuthCredential
nesnesini oturum açmış kullanıcınınlinkWithCredential
yöntemine iletin: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) } }
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:val prevUser = auth.currentUser auth.signInWithCredential(credential) .addOnSuccessListener { result -> val currentUser = result.user // Merge prevUser and currentUser accounts and data // ... } .addOnFailureListener { // ... }
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.
Firebase.auth.currentUser!!.unlink(providerId) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Auth provider unlinked from account // ... } }
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 // ... } } });