יצירת משתמש
יש כמה אפשרויות ליצירת משתמש חדש:
מהאפליקציה: יוצרים משתמש חדש בפרויקט Firebase על ידי קריאה לשיטה
createUserWithEmailAndPassword()או על ידי כניסה של משתמש בפעם הראשונה באמצעות ספק זהויות מאוחד, כמו כניסה באמצעות חשבון Google, כניסה באמצעות פייסבוק או כניסה באמצעות אפל.במסוף Firebase: יוצרים משתמש חדש עם אימות באמצעות סיסמה בכרטיסייה Users (משתמשים) בSecurity (אבטחה) > Authentication (אימות).
קבלת פרופיל של משתמש
כדי לקבל את פרטי הפרופיל של משתמש, משתמשים במאפיינים של User. יש שלוש דרכים לקבל אובייקט User שמייצג את המשתמש הנוכחי:
הזרמים
authStateChanges,idTokenChangesו-userChanges: המאזינים יקבלו אתUserהנוכחי או אתnullאם אף משתמש לא מאומת:FirebaseAuth.instance .authStateChanges() .listen((User? user) { if (user != null) { print(user.uid); } });כשהאפליקציה מופעלת, אירוע מופעל אחרי ששוחזרו פרטי הכניסה של המשתמש (אם יש כאלה) מהאחסון המקומי. המשמעות היא שהמאזינים שלכם תמיד מקבלים קריאה כשהמצב של המשתמש מאותחל. לאחר מכן, בכל פעם שמצב האימות משתנה, יופעל אירוע חדש עם מצב המשתמש המעודכן.
על ידי מעקב אחרי מצב האימות, אפשר ליצור ממשק משתמש שמגיב לשינויים במצב האימות. אל תציבו את
authStateChanges().listen(...)ישירות בתוך שיטת ה-build של הווידג'ט, כי היא תיצור מינוי חדש בכל בנייה מחדש. אם אתם צריכים לעדכן את ממשק המשתמש בתגובה למצב האימות, אתם יכולים להשתמש ב-StreamBuilder:StreamBuilder<User?>( stream: FirebaseAuth.instance.authStateChanges(), builder: (BuildContext context, AsyncSnapshot<User?> snapshot) { if (snapshot.hasError) { return const Text('Something went wrong'); } if (snapshot.connectionState == ConnectionState.waiting) { return const Text("Loading..."); } if (!snapshot.hasData) { return const SignInScreen(); } final user = snapshot.data!; return HomeScreen(userId: user.uid); }, )הגישה הזו מבטיחה שייבנה מחדש עץ הווידג'טים באופן אוטומטי כשמצב האימות של המשתמש משתנה.
אובייקט
UserCredentialשמוחזר על ידי שיטות האימות (signIn-): לאובייקטUserCredentialיש מאפייןuserעם הערך הנוכחי שלUser:final userCredential = await FirebaseAuth.instance.signInWithCredential(credential); final user = userCredential.user; print(user?.uid);המאפיין
currentUserשל מופעFirebaseAuth: אם אתם בטוחים שהמשתמש מחובר כרגע, אתם יכולים לגשת אלUserמהמאפייןcurrentUser:if (FirebaseAuth.instance.currentUser != null) { print(FirebaseAuth.instance.currentUser?.uid); }יכולות להיות שתי סיבות לכך שהערך של
currentUserהואnull:- המשתמש לא מחובר לחשבון.
- האתחול של אובייקט האימות לא הסתיים. אם אתם משתמשים ב-listener כדי לעקוב אחרי סטטוס הכניסה של המשתמש, אתם לא צריכים לטפל במקרה הזה.
קבלת פרטים ספציפיים על משתמש מספק מסוים
כדי לקבל את פרטי הפרופיל שאוחזרו מספקי הכניסה שמקושרים למשתמש, משתמשים במאפיין providerData. לדוגמה:
if (user != null) {
for (final providerProfile in user.providerData) {
// ID of the provider (google.com, apple.com, etc.)
final provider = providerProfile.providerId;
// UID specific to the provider
final uid = providerProfile.uid;
// Name, email address, and profile photo URL
final name = providerProfile.displayName;
final emailAddress = providerProfile.email;
final profilePhoto = providerProfile.photoURL;
}
}
עדכון הפרופיל של משתמש
אפשר לעדכן את פרטי הפרופיל הבסיסיים של המשתמש – השם המוצג של המשתמש וכתובת ה-URL של תמונת הפרופיל – באמצעות השיטות update-. לדוגמה:
await user?.updateDisplayName("Jane Q. User");
await user?.updatePhotoURL("https://example.com/jane-q-user/profile.jpg");
הגדרת כתובת אימייל של משתמש
אפשר להגדיר את כתובת האימייל של המשתמש באמצעות השיטה updateEmail(). לדוגמה:
await user?.updateEmail("janeq@example.com");
שליחת הודעת אימות למשתמש
אפשר לשלוח אימייל לאימות כתובת למשתמש באמצעות השיטה sendEmailVerification(). לדוגמה:
await user?.sendEmailVerification();
אפשר להתאים אישית את תבנית האימייל שבה נעשה שימוש בכרטיסייה תבניות של מסוף Firebase דרך אבטחה > אימות. תוכלו לעיין במאמר בנושא תבניות אימייל במרכז העזרה של Firebase.
אפשר גם להעביר את הסטטוס באמצעות כתובת URL להמשך כדי להפנות חזרה לאפליקציה כששולחים אימייל לאימות.
בנוסף, אפשר להתאים את הודעת האימות לשפה מסוימת על ידי עדכון קוד השפה במופע האימות לפני שליחת האימייל. לדוגמה:
await FirebaseAuth.instance.setLanguageCode("fr");
await user?.sendEmailVerification();
הגדרת סיסמה למשתמש
אפשר להגדיר סיסמה למשתמש באמצעות השיטה updatePassword(). לדוגמה:
await user?.updatePassword(newPassword);
שליחת אימייל לאיפוס סיסמה
אפשר לשלוח אימייל לאיפוס סיסמה למשתמש באמצעות השיטה sendPasswordResetEmail(). לדוגמה:
await FirebaseAuth.instance
.sendPasswordResetEmail(email: "user@example.com");
אפשר להתאים אישית את תבנית האימייל שבה נעשה שימוש בכרטיסייה תבניות של מסוף Firebase דרך אבטחה > אימות. תוכלו לעיין במאמר בנושא תבניות אימייל במרכז העזרה של Firebase.
אפשר גם להעביר את הסטטוס באמצעות כתובת URL להמשך כדי להפנות חזרה לאפליקציה כששולחים אימייל לאיפוס סיסמה.
בנוסף, אפשר להתאים את האימייל לאיפוס הסיסמה לשפה מסוימת על ידי עדכון קוד השפה במופע של Auth לפני שליחת האימייל. לדוגמה:
await FirebaseAuth.instance.setLanguageCode("fr");
אפשר גם לשלוח אימיילים לאיפוס סיסמה מFirebaseהמסוף.
מחיקת משתמש
אפשר למחוק חשבון משתמש באמצעות השיטה delete(). לדוגמה:
await user?.delete();
אפשר גם למחוק משתמשים במסוף Firebase בכרטיסייה משתמשים שבקטע אבטחה > אימות.
אימות מחדש של משתמש
כדי לבצע פעולות מסוימות שקשורות לאבטחה, כמו מחיקת חשבון, הגדרת כתובת אימייל ראשית ושינוי סיסמה, המשתמש צריך להיכנס לחשבון שלו לאחרונה. אם מבצעים אחת מהפעולות האלה והמשתמש נכנס לחשבון לפני יותר מדי זמן, הפעולה נכשלת ומוחזרת שגיאה FirebaseAuthException עם הקוד requires-recent-login.
במקרה כזה, צריך לבצע אימות מחדש של המשתמש על ידי קבלת פרטי כניסה חדשים מהמשתמש והעברת פרטי הכניסה אל reauthenticate. לדוגמה:
// Prompt the user to re-provide their sign-in credentials.
// Then, use the credentials to reauthenticate:
await user?.reauthenticateWithCredential(credential);
ייבוא חשבונות משתמשים
אפשר לייבא חשבונות משתמשים מקובץ לפרויקט Firebase באמצעות הפקודה auth:import של Firebase CLI. לדוגמה:
firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14