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

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

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

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

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

  1. היכנס למשתמש באמצעות כל ספק או שיטה של ​​אימות.

  2. השלם את זרימת הכניסה עבור ספק האימות החדש עד, אך לא כולל, קריאה לאחת משיטות signInWith -. לדוגמה, קבל את אסימון ה-Google ID של המשתמש, אסימון הגישה לפייסבוק או דוא"ל וסיסמה.

  3. קבל אובייקט Credential עבור ספק האימות החדש:

    // Google Sign-in
    final credential = GoogleAuthProvider.credential(idToken: idToken);
    
    // Email and password sign-in
    final credential =
        EmailAuthProvider.credential(email: emailAddress, password: password);
    
    // Etc.
    
  4. העבר את אובייקט Credential לשיטת ה- linkWithCredential() של משתמש הכניסה:

    try {
      final userCredential = await FirebaseAuth.instance.currentUser
          ?.linkWithCredential(credential);
    } on FirebaseAuthException catch (e) {
      switch (e.code) {
        case "provider-already-linked":
          print("The provider has already been linked to the user.");
          break;
        case "invalid-credential":
          print("The provider's credential is not valid.");
          break;
        case "credential-already-in-use":
          print("The account corresponding to the credential already exists, "
              "or is already linked to a Firebase User.");
          break;
        // See the API reference for the full list of error codes.
        default:
          print("Unknown error.");
      }
      ```
    

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

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

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

try {
  await FirebaseAuth.instance.currentUser?.unlink(providerId);
} on FirebaseAuthException catch (e) {
  switch (e.code) {
    case "no-such-provider":
      print("The user isn't linked to the provider or the provider "
          "doesn't exist.");
      break;
    default:
      print("Unknown error.");
  }
}