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

يمكنك السماح للمستخدمين بتسجيل الدخول إلى تطبيقك باستخدام موفري مصادقة متعددين عن طريق ربط بيانات اعتماد موفر المصادقة بحساب مستخدم موجود. يمكن التعرف على المستخدمين من خلال معرف مستخدم 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.");
  }
}