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

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

قبل البدء

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

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

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

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

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