ربط العديد من مقدّمي خدمات المصادقة بحساب

يمكنك السماح للمستخدمين بتسجيل الدخول إلى تطبيقك باستخدام عدّة موفّري مصادقة من خلال ربط بيانات اعتماد موفّر المصادقة بحساب مستخدم حالي. يمكن تحديد هوية المستخدمين باستخدام رقم تعريف مستخدم Firebase نفسه بغض النظر عن موفّر المصادقة الذي استخدموه لتسجيل الدخول. على سبيل المثال، يمكن لمستخدم سجّل الدخول باستخدام كلمة مرور ربط حساب Google وتسجيل الدخول بأي من الطريقتَين في المستقبل. أو يمكن لمستخدم مجهول ربط حساب على فيسبوك ثم تسجيل الدخول باستخدام فيسبوك لاحقًا لمواصلة استخدام تطبيقك.

قبل البدء

أضِف دعمًا لموفّرَي مصادقة أو أكثر (قد يشمل ذلك المصادقة المجهولة) إلى تطبيقك.

لربط بيانات اعتماد موفّر المصادقة بحساب مستخدم حالي:

  1. سجِّل دخول المستخدم باستخدام أي موفّر مصادقة أو طريقة مصادقة.

  2. أكمِل عملية تسجيل الدخول لموفّر المصادقة الجديد حتى استدعاء إحدى طرق signInWith-، ولكن لا تستدعِها. على سبيل المثال، احصل على رمز تعريف Google للمستخدم أو رمز الدخول إلى فيسبوك أو عنوان البريد الإلكتروني وكلمة المرور.

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

تحديد المشاكل وحلّها

إذا ظهرت لك أخطاء عند محاولة ربط حسابات متعدّدة، اطّلِع على المستندات حول عناوين البريد الإلكتروني التي تم إثبات ملكيتها.