بدء مصادقة 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 Authentication لتفعيل تسجيل الدخول باستخدام عنوان البريد الإلكتروني وكلمة المرور وأي مقدّم خدمة هوية آخر تريده لتطبيقك.

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

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

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

لا يتطلّب استخدام محاكي Authentication سوى بضع خطوات:

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

  2. من جذر دليل مشروعك المحلي، شغِّل firebase emulators:start.

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

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

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

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

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

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

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

تتيح لك خدمة Firebase Auth الاشتراك في الوقت الفعلي في هذه الحالة من خلال 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);. سيظل بإمكانك تعديل إعدادات الثبات لكل مثيل من Auth باستخدام 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);

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

اطّلِع على الأدلة حول تسجيل الدخول وتسجيل المستخدمين باستخدام خدمات الهوية والمصادقة المتوافقة.