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

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

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

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

FirebaseAuth בכיתה היא השער עבור כל השיחות API. זהו נגישים דרך FirebaseAuth.DefaultInstance .
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

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

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

    כניסה עם גוגל
    Firebase.Auth.Credential credential =
        Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken);
    
    פייסבוק כניסה
    Firebase.Auth.Credential credential =
        Firebase.Auth.FacebookAuthProvider.GetCredential(accessToken);
    
    דוא"ל סיסמה הכניסה
    Firebase.Auth.Credential credential =
        Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
    
  4. תעביר את Firebase.Auth.Credential האובייקט אל שנכנסו לחשבון המשתמש LinkWithCredentialAsync השיטה:

    auth.CurrentUser.LinkWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("LinkWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("LinkWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("Credentials successfully linked to Firebase user: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    });
    

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

    // Gather data for the currently signed in User.
    string currentUserId = auth.CurrentUser.UserId;
    string currentEmail = auth.CurrentUser.Email;
    string currentDisplayName = auth.CurrentUser.DisplayName;
    System.Uri currentPhotoUrl = auth.CurrentUser.PhotoUrl;
    
    // Sign in with the new credentials.
    auth.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    
      // TODO: Merge app specific details using the newUser and values from the
      // previous user, saved above.
    });
    

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

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

לביטול קישור ספק auth מחשבון משתמש, לעבור ספק מזהה את UnlinkAsync השיטה. אתה יכול לקבל את תעודות הזהות ספקית של ספקי auth קשורה משתמש על ידי התקשרות ProviderData .

// Unlink the sign-in provider from the currently active user.
// providerIdString is a string identifying a provider,
// retrieved via FirebaseAuth.FetchProvidersForEmail().
auth.CurrentUser.UnlinkAsync(providerIdString).ContinueWith(task => {
  if (task.IsCanceled) {
    Debug.LogError("UnlinkAsync was canceled.");
    return;
  }
  if (task.IsFaulted) {
    Debug.LogError("UnlinkAsync encountered an error: " + task.Exception);
    return;
  }

  // The user has been unlinked from the provider.
  Firebase.Auth.FirebaseUser newUser = task.Result;
  Debug.LogFormat("Credentials successfully unlinked from user: {0} ({1})",
      newUser.DisplayName, newUser.UserId);
});