אתה יכול לאפשר למשתמשים להיכנס לאפליקציה שלך באמצעות מספר ספקי אימות על ידי קישור אישורי ספק אימות לחשבון משתמש קיים. ניתן לזהות משתמשים באמצעות אותו מזהה משתמש של Firebase ללא קשר לספק האימות שבו השתמשו כדי להיכנס. לדוגמה, משתמש שנכנס עם סיסמה יכול לקשר חשבון Google ולהיכנס עם כל אחת מהשיטות בעתיד. לחלופין, משתמש אנונימי יכול לקשר חשבון פייסבוק ולאחר מכן, מאוחר יותר, להיכנס לפייסבוק כדי להמשיך להשתמש באפליקציה שלך.
לפני שאתה מתחיל
הוסף תמיכה עבור שני ספקי אימות או יותר (אולי כולל אימות אנונימי) לאפליקציה שלך.
קשר את אישורי ספק ההסמכה לחשבון משתמש
כדי לקשר את אישורי ספק ההסמכה לחשבון משתמש קיים:
- היכנס למשתמש באמצעות כל ספק או שיטה של אימות.
- השלם את זרימת הכניסה עבור ספק האימות החדש עד, אך לא כולל, קריאה לאחת משיטות
FirebaseAuth.signInWith
. לדוגמה, קבל את אסימון ה-Google ID של המשתמש, אסימון הגישה לפייסבוק או דוא"ל וסיסמה. קבל
AuthCredential
עבור ספק האימות החדש:כניסה לגוגל
Kotlin+KTX
val credential = GoogleAuthProvider.getCredential(googleIdToken, null)
Java
AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
כניסה לפייסבוק
Kotlin+KTX
val credential = FacebookAuthProvider.getCredential(token.token)
Java
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
כניסה עם סיסמת דוא"ל
Kotlin+KTX
val credential = EmailAuthProvider.getCredential(email, password)
Java
AuthCredential credential = EmailAuthProvider.getCredential(email, password);
העבר את האובייקט
AuthCredential
לשיטתlinkWithCredential
של המשתמש המחובר: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); } } });
הקריאה ל-
linkWithCredential
תיכשל אם האישורים כבר מקושרים לחשבון משתמש אחר. במצב זה, עליך לטפל במיזוג החשבונות והנתונים המשויכים בהתאם לאפליקציה שלך: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
תצליח, המשתמש יכול כעת להיכנס באמצעות כל ספק אימות מקושר ולגשת לאותם נתוני Firebase.
בטל קישור של ספק אישור מחשבון משתמש
אתה יכול לבטל קישור של ספק אישור מחשבון, כך שהמשתמש לא יוכל יותר להיכנס עם אותו ספק.
כדי לבטל קישור של ספק אישור מחשבון משתמש, העבר את מזהה הספק לשיטת unlink
. אתה יכול לקבל את מזהי הספק של ספקי ההסמכה המקושרים למשתמש על ידי קריאה getProviderData
.
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 // ... } } });