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

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

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

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

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

  1. کاربر را با استفاده از هر ارائه دهنده یا روش احراز هویتی وارد سیستم کنید.

  2. جریان ورود به سیستم برای ارائه‌دهنده‌ی احراز هویت جدید را تا فراخوانی یکی از متدهای signInWith - تکمیل کنید، اما این کار را شامل نمی‌شود. برای مثال، توکن شناسه‌ی گوگل کاربر، توکن دسترسی فیسبوک یا ایمیل و رمز عبور را دریافت کنید.

  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.");
  }
}

عیب‌یابی

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