چندین ارائه دهنده تأیید اعتبار را به یک حساب در Unity پیوند دهید

می‌توانید به کاربران اجازه دهید با استفاده از چندین ارائه‌دهنده احراز هویت، با پیوند دادن اعتبار ارائه‌دهنده تأیید اعتبار به یک حساب کاربری موجود، به برنامه شما وارد شوند. کاربران با همان شناسه کاربر Firebase بدون توجه به ارائه‌دهنده احراز هویتی که برای ورود به سیستم استفاده کرده‌اند، قابل شناسایی هستند. برای مثال، کاربری که با رمز ورود وارد شده است، می‌تواند یک حساب Google را پیوند داده و در آینده با هر روشی وارد شود. یا، یک کاربر ناشناس می تواند یک حساب فیس بوک را پیوند دهد و بعداً برای ادامه استفاده از برنامه شما با فیس بوک وارد شود.

قبل از شروع

پشتیبانی از دو یا چند ارائه دهنده احراز هویت (احتمالاً از جمله احراز هویت ناشناس) را به برنامه خود اضافه کنید.

کلاس FirebaseAuth دروازه همه تماس‌های API است. از طریق FirebaseAuth.DefaultInstance قابل دسترسی است.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

برای پیوند دادن اطلاعات کاربری ارائه دهنده اعتبار به یک حساب کاربری موجود:

  1. با استفاده از هر ارائه دهنده یا روش احراز هویت، کاربر را وارد کنید.
  2. جریان ورود به سیستم ارائه‌دهنده احراز هویت جدید را تا فراخوانی یکی از روش‌های Firebase.Auth.FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync ، بدون احراز هویت کامل کنید. به عنوان مثال، رمز Google ID کاربر، رمز دسترسی فیس بوک یا ایمیل و رمز عبور را دریافت کنید.
  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.AuthResult result = task.Result;
      Debug.LogFormat("Credentials successfully linked to Firebase user: {0} ({1})",
          result.User.DisplayName, result.User.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.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.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.AuthResult result = task.Result;
  Debug.LogFormat("Credentials successfully unlinked from user: {0} ({1})",
      result.User.DisplayName, result.User.UserId);
});