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

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

قبل از اینکه شروع کنی

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

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

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

  1. کاربر را با استفاده از هر ارائه دهنده یا روش احراز هویتی وارد سیستم کنید.
  2. جریان ورود به سیستم را برای ارائه‌دهنده‌ی احراز هویت جدید تا فراخوانی یکی از متدهای Firebase.Auth.FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync تکمیل کنید، اما این شامل آن نمی‌شود. برای مثال، توکن شناسه‌ی گوگل کاربر، توکن دسترسی فیسبوک یا ایمیل و رمز عبور را دریافت کنید.
  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 دسترسی پیدا کند.

یک حساب کاربری Firebase می‌تواند چندین ارائه‌دهنده‌ی احراز هویت (مثلاً ایمیل/رمز عبور، گوگل، فیس‌بوک) داشته باشد که به کاربر اجازه می‌دهد از طریق روش‌های مختلف به یک حساب 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);
});

عیب‌یابی

اگر هنگام تلاش برای پیوند دادن چندین حساب با خطا مواجه شدید، به مستندات مربوط به آدرس‌های ایمیل تأیید شده مراجعه کنید.