יצירת משתמש
יש ארבע דרכים ליצור משתמש חדש בפרויקט Firebase:
- מבצעים קריאה ל-method
createUserWithEmailAndPassword()
. - כניסה של משתמש בפעם הראשונה באמצעות ספק זהויות מאוחד, כמו כניסה באמצעות חשבון Google, כניסה באמצעות פייסבוק או אפל.
אפשר גם ליצור משתמשים חדשים עם אימות באמצעות סיסמה בקטע 'אימות' במסוף Firebase, בדף 'משתמשים'.
קבלת פרופיל של משתמש
כדי לקבל את פרטי הפרופיל של משתמש, משתמשים במאפיינים של User
. יש שלוש דרכים לקבל אובייקט User
שמייצג את המשתמש הנוכחי:
הזרמים
authStateChanges
,idTokenChanges
ו-userChanges
: המאזינים יקבלו אתUser
הנוכחי או אתnull
אם אף משתמש לא מאומת:FirebaseAuth.instance .authStateChanges() .listen((User? user) { if (user != null) { print(user.uid); } });
כשהאפליקציה מופעלת, אירוע מופעל אחרי ששוחזרו פרטי הכניסה של המשתמש (אם יש כאלה) מהאחסון המקומי. כלומר, הקריאה תמיד מתבצעת אל פונקציות ה-listener כשמצב המשתמש מאותחל. לאחר מכן, בכל פעם שמצב האימות משתנה, יופעל אירוע חדש עם מצב המשתמש המעודכן.
על ידי מעקב אחרי מצב האימות, אפשר ליצור ממשק משתמש שמגיב לשינויים במצב האימות. אל תציבו את
authStateChanges().listen(...)
ישירות בתוך שיטת הבנייה של הווידג'ט, כי היא תיצור מינוי חדש בכל בנייה מחדש. אם אתם צריכים לעדכן את ממשק המשתמש בתגובה למצב האימות, אתם יכולים להשתמש ב-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 להמשך כדי להפנות בחזרה לאפליקציה כששולחים אימייל לאימות.
בנוסף, אפשר להתאים את הודעת האימות לשפה מסוימת על ידי עדכון קוד השפה במופע של Auth לפני שליחת האימייל. לדוגמה:
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();
אפשר גם למחוק משתמשים מהקטע Authentication (אימות) במסוף Firebase, בדף Users (משתמשים).
אימות מחדש של משתמש
כדי לבצע פעולות מסוימות שקשורות לאבטחה, כמו מחיקת חשבון, הגדרת כתובת אימייל ראשית ושינוי סיסמה, המשתמש צריך להיכנס לחשבון שלו לאחרונה. אם מבצעים אחת מהפעולות האלה, והמשתמש נכנס לחשבון לפני זמן רב מדי, הפעולה נכשלת ומוחזרת שגיאת 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