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

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

قبل البدء

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

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

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

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

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

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

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

    SwiftUI

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

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

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

    SwiftUI

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

    Swift

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

    Objective-C

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

    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.

    Swift

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

    Objective-C

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

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

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

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

    SwiftUI

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

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

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

    SwiftUI

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

    Swift

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

    Objective-C

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

    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.

    Swift

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

    Objective-C

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

إجراء مقترَح: ضبط سياسة كلمة المرور

يمكنك تحسين أمان الحساب من خلال فرض متطلبات معيّنة على مدى تعقيد كلمة المرور.

لضبط سياسة كلمات المرور لمشروعك، افتح علامة التبويب سياسة كلمات المرور في صفحة "إعدادات المصادقة" في وحدة تحكّم Firebase:

إعدادات المصادقة

تتيح Firebase Authentication سياسات كلمة المرور المتطلبات التالية لكلمة المرور:

  • يجب استخدام أحرف صغيرة

  • يجب إدخال حرف كبير.

  • يجب إدخال حرف رقمي.

  • يجب إدخال أحرف ليست أبجدية رقمية.

    تستوفي الأحرف التالية شرط الأحرف غير الأبجدية الرقمية: ^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~

  • الحد الأدنى لطول كلمة المرور (يتراوح من 6 إلى 30 حرفًا، والعدد التلقائي هو 6)

  • الحد الأقصى لطول كلمة المرور (الحد الأقصى للطول هو 4096 حرفًا)

يمكنك تفعيل فرض سياسة كلمات المرور في وضعَين:

  • طلب: تفشل محاولات تسجيل الدخول إلى أن يغيّر المستخدم كلمة المرور لتكون متوافقة مع سياستك.

  • الإشعار: يُسمح للمستخدمين بتسجيل الدخول باستخدام كلمة مرور غير متوافقة. فعندما باستخدام هذا الوضع، يجب عليك التحقق مما إذا كانت كلمة مرور المستخدم تتوافق مع من جانب العميل ومطالبة المستخدم بتحديث وكلمة مرور في حال عدم الالتزام بها.

على المستخدمين الجدد دائمًا اختيار كلمة مرور تمتثل لسياسة مؤسستك.

إذا كان لديك مستخدمون نشطون، ننصحك بعدم تفعيل وضع "الطلب" ما لم يكن لديك نية حظر وصول المستخدمين الذين لا تتوافق كلمات مرورهم مع سياستك. بدلاً من ذلك، استخدِم وضع الإشعارات الذي يسمح للمستخدمين بتسجيل الدخول باستخدام كلمات المرور الحالية وإعلامهم بالمتطلبات التي لا تستوفيها كلمة المرور.

إجراء مقترَح: تفعيل حماية تعداد البريد الإلكتروني

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

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

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

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

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

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

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

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

Swift

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

Objective-C

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

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