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

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

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

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

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

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

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

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