قم بالمصادقة مع Firebase باستخدام الحسابات المستندة إلى كلمة المرور على أنظمة Apple الأساسية

يمكنك استخدام مصادقة Firebase للسماح للمستخدمين بالمصادقة مع Firebase باستخدام عناوين البريد الإلكتروني وكلمات المرور الخاصة بهم، ولإدارة الحسابات المستندة إلى كلمة المرور لتطبيقك.

قبل ان تبدأ

استخدم Swift Package Manager لتثبيت تبعيات Firebase وإدارتها.

  1. في Xcode، مع فتح مشروع التطبيق الخاص بك، انتقل إلى File > Add Packages .
  2. عندما يُطلب منك ذلك، قم بإضافة مستودع Firebase Apple الأساسي لـ SDK:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. اختر مكتبة مصادقة Firebase.
  5. أضف علامة -ObjC إلى قسم إشارات الرابط الأخرى في إعدادات إنشاء هدفك.
  6. عند الانتهاء، سيبدأ Xcode تلقائيًا في حل وتنزيل تبعياتك في الخلفية.

بعد ذلك، قم بتنفيذ بعض خطوات التكوين:

  1. إذا لم تكن قد قمت بعد بربط تطبيقك بمشروع Firebase الخاص بك، فقم بذلك من وحدة تحكم Firebase .
  2. تمكين تسجيل الدخول بالبريد الإلكتروني/كلمة المرور:
    1. في وحدة تحكم Firebase ، افتح قسم المصادقة .
    2. في علامة التبويب طريقة تسجيل الدخول ، قم بتمكين طريقة تسجيل الدخول بالبريد الإلكتروني/كلمة المرور وانقر فوق حفظ .

إنشاء حساب يعتمد على كلمة المرور

لإنشاء حساب مستخدم جديد بكلمة مرور، أكمل الخطوات التالية في نشاط تسجيل الدخول إلى تطبيقك:

  1. قم باستيراد وحدة FirebaseCore في UIApplicationDelegate ، بالإضافة إلى أي وحدات Firebase أخرى يستخدمها مندوب تطبيقك. على سبيل المثال، لاستخدام Cloud Firestore والمصادقة:

    سويفتويي

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    سويفت

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    ج موضوعية

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. قم بتكوين مثيل FirebaseApp مشترك في طريقة application(_:didFinishLaunchingWithOptions:) :

    سويفتويي

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    سويفت

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    ج موضوعية

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. إذا كنت تستخدم SwiftUI، فيجب عليك إنشاء مفوض تطبيق وإرفاقه ببنية App الخاص بك عبر UIApplicationDelegateAdaptor أو NSApplicationDelegateAdaptor . يجب عليك أيضًا تعطيل swizzling مندوب التطبيق. لمزيد من المعلومات، راجع تعليمات SwiftUI .

    سويفتويي

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  4. عندما يقوم مستخدم جديد بالتسجيل باستخدام نموذج الاشتراك في تطبيقك، أكمل أي خطوات جديدة للتحقق من صحة الحساب يتطلبها تطبيقك، مثل التحقق من كتابة كلمة مرور الحساب الجديد بشكل صحيح وتلبية متطلبات التعقيد الخاصة بك.
  5. قم بإنشاء حساب جديد عن طريق تمرير عنوان البريد الإلكتروني وكلمة المرور للمستخدم الجديد إلى createUser .

    سويفت

    Auth.auth().createUser(withEmail: email, password: password) { authResult, error in
      // ...
    }

    ج موضوعية

    [[FIRAuth auth] createUserWithEmail:email
                               password:password
                             completion:^(FIRAuthDataResult * _Nullable authResult,
                                          NSError * _Nullable error) {
      // ...
    }];
    إذا تم إنشاء الحساب الجديد بنجاح، فسيتم تسجيل دخول المستخدم، ويمكنك الحصول على بيانات حساب المستخدم من الكائن الناتج الذي تم تمريره إلى طريقة رد الاتصال.

تسجيل دخول المستخدم باستخدام عنوان البريد الإلكتروني وكلمة المرور

تشبه خطوات تسجيل دخول المستخدم بكلمة مرور خطوات إنشاء حساب جديد. في نشاط تسجيل الدخول إلى تطبيقك، قم بما يلي:

  1. قم باستيراد وحدة FirebaseCore في UIApplicationDelegate ، بالإضافة إلى أي وحدات Firebase أخرى يستخدمها مندوب تطبيقك. على سبيل المثال، لاستخدام Cloud Firestore والمصادقة:

    سويفتويي

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    سويفت

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    ج موضوعية

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. قم بتكوين مثيل FirebaseApp مشترك في طريقة application(_:didFinishLaunchingWithOptions:) :

    سويفتويي

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    سويفت

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    ج موضوعية

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. إذا كنت تستخدم SwiftUI، فيجب عليك إنشاء مفوض تطبيق وإرفاقه ببنية App الخاص بك عبر UIApplicationDelegateAdaptor أو NSApplicationDelegateAdaptor . يجب عليك أيضًا تعطيل swizzling مندوب التطبيق. لمزيد من المعلومات، راجع تعليمات SwiftUI .

    سويفتويي

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  4. عندما يقوم أحد المستخدمين بتسجيل الدخول إلى تطبيقك، قم بتمرير عنوان البريد الإلكتروني للمستخدم وكلمة المرور signIn .

    سويفت

    Auth.auth().signIn(withEmail: email, password: password) { [weak self] authResult, error in
      guard let strongSelf = self else { return }
      // ...
    }

    ج موضوعية

    [[FIRAuth auth] signInWithEmail:self->_emailField.text
                           password:self->_passwordField.text
                         completion:^(FIRAuthDataResult * _Nullable authResult,
                                      NSError * _Nullable error) {
      // ...
    }];
    إذا قام المستخدم بتسجيل الدخول بنجاح، فيمكنك الحصول على بيانات حساب المستخدم من الكائن الناتج الذي تم تمريره إلى طريقة رد الاتصال.

موصى به: تمكين حماية تعداد البريد الإلكتروني

تؤدي بعض طرق مصادقة Firebase التي تأخذ عناوين البريد الإلكتروني كمعلمات إلى حدوث أخطاء محددة إذا كان عنوان البريد الإلكتروني غير مسجل عندما يجب تسجيله (على سبيل المثال، عند تسجيل الدخول باستخدام عنوان بريد إلكتروني وكلمة مرور)، أو مسجل عندما يجب أن يكون غير مستخدم (على سبيل المثال، عند تغيير عنوان البريد الإلكتروني للمستخدم). على الرغم من أن هذا يمكن أن يكون مفيدًا في اقتراح حلول محددة للمستخدمين، إلا أنه يمكن أيضًا إساءة استخدامه من قبل جهات ضارة لاكتشاف عناوين البريد الإلكتروني المسجلة بواسطة المستخدمين.

للتخفيف من هذه المخاطر، نوصيك بتمكين حماية تعداد البريد الإلكتروني لمشروعك باستخدام أداة Google Cloud gcloud . لاحظ أن تمكين هذه الميزة يغير سلوك الإبلاغ عن الأخطاء في مصادقة Firebase: تأكد من أن تطبيقك لا يعتمد على الأخطاء الأكثر تحديدًا.

الخطوات التالية

بعد قيام المستخدم بتسجيل الدخول لأول مرة، يتم إنشاء حساب مستخدم جديد وربطه ببيانات الاعتماد - أي اسم المستخدم وكلمة المرور أو رقم الهاتف أو معلومات موفر المصادقة - التي قام المستخدم بتسجيل الدخول بها. يتم تخزين هذا الحساب الجديد كجزء من مشروع Firebase الخاص بك، ويمكن استخدامه لتحديد المستخدم عبر كل تطبيق في مشروعك، بغض النظر عن كيفية تسجيل دخول المستخدم.

  • في تطبيقاتك، يمكنك الحصول على معلومات الملف الشخصي الأساسية للمستخدم من كائن User . راجع إدارة المستخدمين .

  • في قاعدة بيانات Firebase Realtime وقواعد أمان التخزين السحابي، يمكنك الحصول على معرف المستخدم الفريد للمستخدم الذي قام بتسجيل الدخول من متغير auth ، واستخدامه للتحكم في البيانات التي يمكن للمستخدم الوصول إليها.

يمكنك السماح للمستخدمين بتسجيل الدخول إلى تطبيقك باستخدام موفري مصادقة متعددين عن طريق ربط بيانات اعتماد موفر المصادقة بحساب مستخدم موجود.

لتسجيل خروج مستخدم، اتصل signOut: .

سويفت

let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}

ج موضوعية

NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

قد ترغب أيضًا في إضافة رمز معالجة الأخطاء للنطاق الكامل من أخطاء المصادقة. راجع التعامل مع الأخطاء .