بدء استخدام "مصادقة Firebase" على Flutter

ربط تطبيقك بمنصة Firebase

ثبِّت حِزم تطوير البرامج (SDK) لمنصة Firebase في Flutter وبدِّئها إذا لم يسبق لك إجراء ذلك.

إضافة "مصادقة Firebase" إلى تطبيقك

  1. من جذر مشروع Flutter، نفِّذ الأمر التالي لتثبيت المكوّن الإضافي:

    flutter pub add firebase_auth
    
  2. بعد اكتمال التثبيت، أعِد إنشاء تطبيق Flutter:

    flutter run
    
  3. استورِد المكوّن الإضافي في رمز Dart البرمجي:

    import 'package:firebase_auth/firebase_auth.dart';
    

لاستخدام موفّر مصادقة، عليك تفعيله في وحدة تحكّم Firebase (انتقِل إلى علامة التبويب الأمان > المصادقة > طريقة تسجيل الدخول). يمكنك تفعيل تسجيل الدخول باستخدام البريد الإلكتروني وكلمة المرور والعديد من موفّري الهوية الآخرين الذين تريدهم لتطبيقك.

(اختياري) إنشاء نموذج أولي واختباره باستخدام مجموعة أدوات المحاكاة المحلية لمنصة Firebase

قبل التحدّث عن كيفية مصادقة تطبيقك للمستخدمين، لنقدّم مجموعة من الأدوات التي يمكنك استخدامها لإنشاء نموذج أولي لوظيفة "المصادقة" واختبارها: مجموعة أدوات المحاكاة المحلية لمنصة Firebase. إذا كنت بصدد الاختيار بين تقنيات المصادقة وموفّريها، أو تجربة نماذج بيانات مختلفة باستخدام بيانات عامة وخاصة باستخدام "المصادقة" و"قواعد أمان Firebase"، أو إنشاء نماذج أولية لتصاميم واجهة مستخدم تسجيل الدخول، يمكن أن يكون العمل محليًا بدون نشر الخدمات المباشرة فكرة رائعة.

يُعدّ محاكي "المصادقة" جزءًا من مجموعة أدوات المحاكاة المحلية، ما يتيح لتطبيقك التفاعل مع محتوى قاعدة البيانات المحاكى وإعداداتها، بالإضافة إلى موارد مشروعك المحاكى (الدوال وقواعد البيانات الأخرى وقواعد الأمان) بشكل اختياري.

لا يتطلّب استخدام محاكي "المصادقة" سوى بضع خطوات:

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

  2. من جذر دليل مشروعك على جهاز المستخدم، نفِّذ الأمر firebase emulators:start.

  3. استخدِم واجهة مستخدم مجموعة أدوات المحاكاة المحلية لإنشاء نماذج أولية تفاعلية، أو واجهة برمجة تطبيقات REST لمحاكي "المصادقة" لإجراء اختبار غير تفاعلي.

  4. استدعِ useAuthEmulator() لتحديد عنوان المحاكي ومنفذه:

    Future<void> main() async {
    WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp();
    
    // Ideal time to initialize
    await FirebaseAuth.instance.useAuthEmulator('localhost', 9099);
    //...
    }
    

يتوفّر دليل مفصّل في مقالة ربط تطبيقك بمحاكي "المصادقة". لمزيد من المعلومات، اطّلِع على مقدّمة مجموعة أدوات المحاكاة المحلية.

لنتابع الآن كيفية مصادقة المستخدمين.

التحقّق من حالة المصادقة الحالية

توفّر "مصادقة Firebase" العديد من الطرق والأدوات المساعدة التي تتيح لك دمج المصادقة الآمنة في تطبيق Flutter الجديد أو الحالي. في حالات عديدة، ستحتاج إلى معرفة حالة مصادقة المستخدم، مثل ما إذا كان قد سجّل الدخول أو سجّل الخروج.

تتيح لك "مصادقة Firebase" الاشتراك في هذه الحالة في الوقت الفعلي من خلال Stream. بعد استدعاء هذا الإجراء، يقدّم تدفق البيانات حدثًا فوريًا لحالة المصادقة الحالية للمستخدم، ثم يقدّم أحداثًا لاحقة كلما تغيّرت حالة المصادقة.

هناك ثلاث طرق للاستماع إلى تغييرات حالة المصادقة:

authStateChanges()

للاشتراك في هذه التغييرات، استدعِ طريقة authStateChanges() في مثيل FirebaseAuth:

FirebaseAuth.instance
  .authStateChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

يتم تنشيط الأحداث عند حدوث ما يلي:

  • بعد تسجيل المستمع مباشرةً
  • عند تسجيل دخول مستخدم
  • عند تسجيل خروج المستخدم الحالي

idTokenChanges()

للاشتراك في هذه التغييرات، استدعِ طريقة idTokenChanges() في مثيل FirebaseAuth:

FirebaseAuth.instance
  .idTokenChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

يتم تنشيط الأحداث عند حدوث ما يلي:

  • بعد تسجيل المستمع مباشرةً
  • عند تسجيل دخول مستخدم
  • عند تسجيل خروج المستخدم الحالي
  • عند حدوث تغيير في الرمز المميّز للمستخدم الحالي

userChanges()

للاشتراك في هذه التغييرات، استدعِ طريقة userChanges() في مثيل FirebaseAuth:

FirebaseAuth.instance
  .userChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

يتم تنشيط الأحداث عند حدوث ما يلي:

  • بعد تسجيل المستمع مباشرةً
  • عند تسجيل دخول مستخدم
  • عند تسجيل خروج المستخدم الحالي
  • عند حدوث تغيير في الرمز المميّز للمستخدم الحالي
  • عند استدعاء الطرق التالية التي يوفّرها FirebaseAuth.instance.currentUser:
    • reload()
    • unlink()
    • updateEmail()
    • updatePassword()
    • updatePhoneNumber()
    • updateProfile()

الاحتفاظ بحالة المصادقة

توفّر حِزم تطوير البرامج (SDK) لمنصة Firebase لجميع المنصات دعمًا جاهزًا لضمان الاحتفاظ بحالة مصادقة المستخدم عند إعادة تشغيل التطبيق أو إعادة تحميل الصفحة.

على المنصات الأصلية، مثل Android وiOS، لا يمكن ضبط هذا السلوك وسيتم الاحتفاظ بحالة مصادقة المستخدم على الجهاز بين عمليات إعادة تشغيل التطبيق. يمكن للمستخدم محو البيانات المخزّنة مؤقتًا في التطبيقات باستخدام إعدادات الجهاز، ما سيؤدي إلى محو أي حالة حالية يتم تخزينها.

على منصات الويب، يتم تخزين حالة مصادقة المستخدم في IndexedDB. يمكنك تغيير إعدادات الاحتفاظ بالبيانات لتخزين البيانات في وحدة التخزين المحلية باستخدام Persistence.LOCAL. إذا لزم الأمر، يمكنك تغيير هذا السلوك التلقائي للاحتفاظ بحالة المصادقة للجلسة الحالية فقط، أو عدم الاحتفاظ بها على الإطلاق. لضبط هذه الإعدادات، استدعِ الطريقة التالية FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.LOCAL);. سيظل بإمكانك تعديل إعدادات الاحتفاظ بالبيانات لكل مثيل من "المصادقة" باستخدام setPersistence(Persistence.NONE).

// Disable persistence on web platforms. Must be called on initialization:
final auth = FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.NONE);
// To change it after initialization, use `setPersistence()`:
await auth.setPersistence(Persistence.LOCAL);

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

استكشِف الأدلة حول تسجيل دخول المستخدمين وتسجيلهم باستخدام خدمات الهوية والمصادقة المتوافقة.