תחילת העבודה עם אימות ב-Firebase ב-Flutter

חיבור האפליקציה ל-Firebase

מתקינים ומפעילים את ערכות Firebase SDK של Flutter, אם עדיין לא עשיתם זאת. אז.

הוספת אימות ב-Firebase לאפליקציה

  1. מהרמה הבסיסית (root) של פרויקט Flutter, מריצים את הפקודה הבאה כדי להתקין את הפקודה הפלאגין:

    flutter pub add firebase_auth
    
  2. בסיום התהליך, בונים מחדש את אפליקציית Flutter:

    flutter run
    
  3. מייבאים את הפלאגין בקוד Drt:

    import 'package:firebase_auth/firebase_auth.dart';
    

כדי להשתמש בספק אימות, צריך להפעיל אותו במסוף Firebase. עוברים לדף Sign-in Method (שיטת כניסה) בקטע Firebase Authentication (אימות ב-Firebase) כדי להפעיל כניסה באמצעות אימייל/סיסמה וכל ספק זהויות אחר שרוצים להשתמש בו באפליקציה.

(אופציונלי) אב-טיפוס ובדיקה באמצעות חבילת אמולטור מקומי של Firebase

לפני שנדבר על האופן שבו האפליקציה מאמתת משתמשים, נתחיל כלים שבהם תוכלו להשתמש כדי ליצור אב טיפוס ולבדוק את פונקציונליות האימות: חבילת אמולטור מקומי של Firebase. אם אתם שוקלים בין שיטות אימות וספקים נוספים, לנסות מודלים שונים של נתונים עם נתונים ציבוריים ופרטיים באמצעות אימות וכללי אבטחה של Firebase, או אבות טיפוס לעיצובים של ממשק המשתמש לכניסה, עבודה מקומית בלי לפרוס שירותים בזמן אמת יכול להיות רעיון מעולה.

אמולטור אימות הוא חלק מחבילת האמולטור המקומית, מאפשרת לאפליקציה לבצע אמולציה של תוכן מסד הנתונים ושל ההגדרות שלו, כמו וגם באופן אופציונלי את משאבי הפרויקט האמולציה (פונקציות, מסדי נתונים אחרים, וכללי אבטחה).

השימוש באמולטור האימות כולל רק כמה שלבים:

  1. הוספת שורת קוד להגדרות הבדיקה של האפליקציה כדי להתחבר למהדר.

  2. מהרמה הבסיסית (root) של ספריית הפרויקט המקומית, מריצים את firebase emulators:start.

  3. להשתמש בממשק המשתמש של חבילת האמולטור המקומית ליצירת אב טיפוס אינטראקטיבי, או API ל-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!');
    }
  });

האירועים מופעלים כאשר מתקיימים התנאים הבאים:

  • מיד לאחר שה-listener נרשם.
  • כשמשתמש מחובר לחשבון.
  • כאשר המשתמש הנוכחי לא מחובר.

idTokenChanges()

כדי להירשם לשינויים האלה, צריך להפעיל את השיטה idTokenChanges() במכונה של FirebaseAuth:

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

האירועים מופעלים כאשר מתקיימים התנאים הבאים:

  • מיד לאחר שה-listener נרשם.
  • כשמשתמש מחובר לחשבון.
  • כאשר המשתמש הנוכחי לא מחובר.
  • כשיש שינוי באסימון של המשתמש הנוכחי.

userChanges()

כדי להירשם לשינויים האלה, צריך להפעיל את השיטה userChanges() במכשיר מופע של FirebaseAuth:

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

האירועים מופעלים כאשר מתקיימים התנאים הבאים:

  • מיד לאחר שה-listener נרשם.
  • כשמשתמש מחובר לחשבון.
  • כאשר המשתמש הנוכחי לא מחובר.
  • כשחל שינוי באסימון של המשתמש הנוכחי.
  • כשמתבצעת קריאה לשיטות הבאות ש-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);

השלבים הבאים

כדאי לעיין במדריכים בנושא כניסה לחשבון והרשמה של משתמשים באמצעות הכלים הנתמכים שירותי זהות ואימות.