אימות ב-Firebase ב-Flutter בפעם הראשונה

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

אם עדיין לא עשיתם זאת, מתקינים ומפעילים את Firebase SDKs for Flutter.

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

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

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

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

    import 'package:firebase_auth/firebase_auth.dart';
    

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

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

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

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

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

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

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

השלבים הבאים

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