Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

קשר ספקי אימות מרובים לחשבון באנדרואיד

באפשרותך לאפשר למשתמשים להיכנס לאפליקציה שלך באמצעות ספקי אימות מרובים על ידי קישור אישורי ספק האימות לחשבון משתמש קיים. משתמשים ניתנים לזיהוי על ידי אותו מזהה משתמש של Firebase ללא קשר לספק האימות בו השתמשו בכניסה. לדוגמה, משתמש שנכנס באמצעות סיסמה יכול לקשר חשבון Google ולהיכנס בעת ובעונה אחת לשתי שיטות. לחלופין, משתמש אנונימי יכול לקשר חשבון פייסבוק ואז, בהמשך, להיכנס עם פייסבוק כדי להמשיך להשתמש באפליקציה שלך.

לפני שאתה מתחיל

הוסף תמיכה עבור שני ספקי אימות או יותר (אולי כולל אימות אנונימי) לאפליקציה שלך.

לקישור אישורי ספק האימות לחשבון משתמש קיים:

  1. היכנס למשתמש באמצעות כל ספק או שיטת אימות.
  2. השלם את זרימת הכניסה לספק האימות החדש עד FirebaseAuth.signInWith לאחת משיטות FirebaseAuth.signInWith , אך לא כולל. לדוגמה, קבל את אסימון מזהה Google של המשתמש, אסימון גישה לפייסבוק או דוא"ל וסיסמא
  3. קבל AuthCredential אישור לספק האימות החדש:

    כניסה ל- Google

    ג'אווה

    AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);

    Kotlin + KTX

    val credential = GoogleAuthProvider.getCredential(googleIdToken, null)
    כניסה לפייסבוק

    ג'אווה

    AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());

    Kotlin + KTX

    val credential = FacebookAuthProvider.getCredential(token.token)
    כניסה באמצעות סיסמה בדוא"ל

    ג'אווה

    AuthCredential credential = EmailAuthProvider.getCredential(email, password);

    Kotlin + KTX

    val credential = EmailAuthProvider.getCredential(email, password)
  4. תעביר את AuthCredential האובייקט אל שנכנסו לחשבון המשתמש linkWithCredential השיטה:

    ג'אווה

    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);
                    }
                }
            });

    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)
                }
            }

    הקריאה ל- linkWithCredential תיכשל אם האישורים כבר מקושרים לחשבון משתמש אחר. במצב זה, עליכם לטפל במיזוג החשבונות והנתונים המשויכים בהתאם לאפליקציה שלכם:

    ג'אווה

    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
                    // ...
                }
            });

    Kotlin + KTX

    val prevUser = auth.currentUser
    auth.signInWithCredential(credential)
            .addOnSuccessListener { result ->
                val currentUser = result.user
                // Merge prevUser and currentUser accounts and data
                // ...
            }
            .addOnFailureListener {
                // ...
            }

אם השיחה ל- linkWithCredential מצליחה, המשתמש יכול כעת להיכנס באמצעות כל ספק אימות מקושר ולגשת לאותם נתוני Firebase.

באפשרותך לבטל קישור של ספק אימות מחשבון, כך שהמשתמש לא יוכל עוד להיכנס עם אותו ספק.

כדי לבטל קישור של ספק אימות מחשבון משתמש, העבירו את מזהה הספק לשיטת unlink . אתה יכול לקבל את מזהי הספקים של ספקי getProviderData המקושרים למשתמש על ידי התקשרות ל- getProviderData .

ג'אווה

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
                    // ...
                }
            }
        });

Kotlin + KTX

Firebase.auth.currentUser!!.unlink(providerId)
        .addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {
                // Auth provider unlinked from account
                // ...
            }
        }