Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

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

קל לארגן דפים בעזרת אוספים אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.

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

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

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

מחלקת FirebaseAuth היא השער לכל קריאות ה-API. ניתן לגשת אליו דרך FirebaseAuth.DefaultInstance .
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

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

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

    כניסה של Google
    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.

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

כדי לבטל קישור של ספק אישור מחשבון משתמש, העבר את מזהה הספק לשיטת UnlinkAsync . אתה יכול לקבל את מזהי הספק של ספקי ההסמכה המקושרים למשתמש על ידי קריאה ל- 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);
});