ربط تطبيقك بمنصة Firebase
ثبِّت حِزم تطوير البرامج (SDK) لمنصة Firebase لنظام Flutter وابدأ إعدادها إذا لم يسبق لك إجراء ذلك.
إضافة خدمة "مصادقة Firebase" إلى تطبيقك
من جذر مشروع Flutter، نفِّذ الأمر التالي لتثبيت المكوّن الإضافي:
flutter pub add firebase_authبعد الانتهاء، أعِد إنشاء تطبيق Flutter باتّباع الخطوات التالية:
flutter runاستورِد المكوّن الإضافي في رمز Dart:
import 'package:firebase_auth/firebase_auth.dart';
لاستخدام موفّر مصادقة، عليك تفعيله في وحدة تحكّم Firebase (انتقِل إلى علامة التبويب الأمان > المصادقة > طريقة تسجيل الدخول). يمكنك تفعيل تسجيل الدخول باستخدام البريد الإلكتروني وكلمة المرور والعديد من موفّري خدمات تحديد الهوية الآخرين الذين تريدهم لتطبيقك.
(اختياري) إنشاء نموذج أوّلي واختباره باستخدام "مجموعة أدوات المحاكاة المحلية" في Firebase
قبل التحدّث عن كيفية مصادقة تطبيقك للمستخدمين، دعنا نقدّم مجموعة من الأدوات التي يمكنك استخدامها لإنشاء نماذج أولية واختبار وظيفة المصادقة: Firebase Local Emulator Suite. إذا كنت بصدد الاختيار بين تقنيات وموفّري خدمات المصادقة، أو تجربة نماذج بيانات مختلفة مع بيانات عامة وخاصة باستخدام ميزة "المصادقة" و"قواعد أمان Firebase"، أو إنشاء نماذج أولية لتصاميم واجهة المستخدم الخاصة بتسجيل الدخول، قد يكون من المفيد أن تتمكّن من العمل محليًا بدون نشر الخدمات المباشرة.
يُعدّ برنامج محاكاة المصادقة جزءًا من "مجموعة المحاكي المحلّي"، التي تتيح لتطبيقك التفاعل مع المحتوى والإعدادات المحاكية لقاعدة البيانات، بالإضافة إلى موارد مشروعك المحاكية (الدوال وقواعد البيانات الأخرى وقواعد الأمان) بشكل اختياري.
لا يتطلّب استخدام محاكي Authentication سوى بضع خطوات:
إضافة سطر من الرمز البرمجي إلى إعدادات الاختبار في تطبيقك للاتصال بالمحاكي
من جذر دليل مشروعك على جهاز المستخدم، نفِّذ الأمر
firebase emulators:start.استخدام واجهة مستخدم Local Emulator Suite لإنشاء نماذج أولية تفاعلية، أو واجهة برمجة تطبيقات REST لمحاكي المصادقة لإجراء اختبارات غير تفاعلية
اتّصِل بالدالة
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);
الخطوات التالية
اطّلِع على الأدلة حول تسجيل الدخول وتسجيل المستخدمين باستخدام خدمات الهوية والمصادقة المتوافقة.