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

קישור האפליקציה ל-Firebase

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

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

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

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

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

    import 'package:firebase_auth/firebase_auth.dart';
    

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

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

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

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

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

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

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

  3. באמצעות ממשק המשתמש של Local Emulator Suite ליצירת אב טיפוס אינטראקטיבי, או באמצעות 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);

השלבים הבאים

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