יצירת משתמש
יש לכם את האפשרויות הבאות ליצירת משתמש חדש:
מהאפליקציה: יוצרים משתמש חדש בפרויקט Firebase באמצעות קריאה לשיטה
CreateUserWithEmailAndPasswordאו באמצעות כניסה של משתמש בפעם הראשונה דרך ספק זהויות מאוחדות, כמו כניסה באמצעות חשבון Google או כניסה באמצעות פייסבוק.במסוף Firebase: יוצרים משתמש חדש עם אימות באמצעות סיסמה בכרטיסייה Users (משתמשים) בSecurity (אבטחה) > Authentication (אימות) > Users (משתמשים).
קבלת המשתמש שמחובר כרגע
הדרך המומלצת לקבל את המשתמש הנוכחי היא להגדיר מאזין באובייקט Auth:
class MyAuthStateListener : public firebase::auth::AuthStateListener { public: void OnAuthStateChanged(firebase::auth::Auth* auth) override { firebase::auth::User user = auth->current_user(); if (user.is_valid()) { // User is signed in printf("OnAuthStateChanged: signed_in %s\n", user.uid().c_str()); } else { // User is signed out printf("OnAuthStateChanged: signed_out\n"); } // ... } }; // ... initialization code // Test notification on registration. MyAuthStateListener state_change_listener; auth->AddAuthStateListener(&state_change_listener);
שימוש ב-listener מבטיח שאובייקט האימות לא יהיה במצב ביניים – כמו אתחול – כשמקבלים את המשתמש הנוכחי.
אפשר גם לקבל את המשתמש שמחובר כרגע על ידי קריאה ל-current_user. אם משתמש לא מחובר, השיטה is_valid של המשתמש תחזיר false.
שמירת פרטי הכניסה של משתמש
פרטי הכניסה של המשתמש יאוחסנו במאגר המפתחות המקומי אחרי שהמשתמש יתחבר. אפשר למחוק את המטמון המקומי של פרטי הכניסה של המשתמשים על ידי ניתוק המשתמשים מהחשבון. מאגר המפתחות הוא ספציפי לפלטפורמה:
- פלטפורמות של אפל: Keychain Services.
- Android: Android Keystore.
- Windows: Credential Management API.
- OS X: Keychain Services.
- Linux: libsecret, שהמשתמש צריך להתקין.
קבלת פרופיל של משתמש
כדי לקבל את פרטי הפרופיל של משתמש, משתמשים בשיטות הגישה של מופע של firebase::auth::User. לדוגמה:
firebase::auth::User user = auth->current_user(); if (user.is_valid()) { std::string name = user.display_name(); std::string email = user.email(); std::string photo_url = user.photo_url(); // The user's ID, unique to the Firebase project. // Do NOT use this value to authenticate with your backend server, // if you have one. Use firebase::auth::User::Token() instead. std::string uid = user.uid(); }
קבלת פרטי פרופיל ספציפיים של משתמש אצל ספק
כדי לקבל את פרטי הפרופיל שאוחזרו מספקי הכניסה שמקושרים למשתמש, צריך להשתמש בשיטה ProviderData. לדוגמה:
firebase::auth::User user = auth->current_user(); if (user.is_valid()) { for (auto it = user.provider_data().begin(); it != user.provider_data().end(); ++it) { firebase::auth::UserInfoInterface profile = *it; // Id of the provider (ex: google.com) std::string providerId = profile.provider_id(); // UID specific to the provider std::string uid = profile.uid(); // Name, email address, and profile photo Url std::string name = profile.display_name(); std::string email = profile.email(); std::string photoUrl = profile.photo_url(); } }
עדכון הפרופיל של משתמש
אפשר לעדכן את פרטי הפרופיל הבסיסיים של המשתמש – השם המוצג של המשתמש וכתובת ה-URL של תמונת הפרופיל – באמצעות השיטה UpdateUserProfile. לדוגמה:
firebase::auth::User user = auth->current_user(); if (user.is_valid()) { firebase::auth::User::UserProfile profile; profile.display_name = "Jane Q. User"; profile.photo_url = "https://example.com/jane-q-user/profile.jpg"; user.UpdateUserProfile(profile).OnCompletion( [](const firebase::Future<void>& completed_future, void* user_data) { // We are probably in a different thread right now. if (completed_future.error() == 0) { printf("User profile updated."); } }, nullptr); // pass user_data here. }
הגדרת כתובת אימייל של משתמש
אפשר להגדיר את כתובת האימייל של המשתמש באמצעות השיטה UpdateEmail. לדוגמה:
firebase::auth::User user = auth->current_user(); if (user.is_valid()) { user.UpdateEmail("user@example.com") .OnCompletion( [](const firebase::Future<void>& completed_future, void* user_data) { // We are probably in a different thread right now. if (completed_future.error() == 0) { printf("User email address updated."); } }, nullptr); }
שליחת אימייל אימות למשתמש
אפשר לשלוח אימייל לאימות כתובת למשתמש באמצעות השיטה SendEmailVerification. לדוגמה:
firebase::auth::User user = auth->current_user(); if (user.is_valid()) { user.SendEmailVerification().OnCompletion( [](const firebase::Future<void>& completed_future, void* user_data) { // We are probably in a different thread right now. if (completed_future.error() == 0) { printf("Email sent."); } }, nullptr); }
אפשר להתאים אישית את תבנית האימייל שמשמשת בקטע 'אימות' במסוף Firebase, בדף 'תבניות אימייל'. מידע נוסף זמין במאמר תבניות אימייל במרכז העזרה של Firebase.
הגדרת סיסמה למשתמש
אפשר להגדיר סיסמה של משתמש באמצעות ה-method UpdatePassword. לדוגמה:
firebase::auth::User user = auth->current_user(); std::string newPassword = "SOME-SECURE-PASSWORD"; if (user.is_valid()) { user.UpdatePassword(newPassword.c_str()) .OnCompletion( [](const firebase::Future<void>& completed_future, void* user_data) { // We are probably in a different thread right now. if (completed_future.error() == 0) { printf("password updated."); } }, nullptr); }
שליחת אימייל לאיפוס הסיסמה
אפשר לשלוח אימייל לאיפוס סיסמה למשתמש באמצעות SendPasswordResetEmail
השיטה. לדוגמה:
std::string emailAddress = "user@example.com"; auth->SendPasswordResetEmail(emailAddress.c_str()) .OnCompletion( [](const firebase::Future<void>& completed_future, void* user_data) { // We are probably in a different thread right now. if (completed_future.error() == 0) { // Email sent. } else { // An error happened. printf("Error %d: %s", completed_future.error(), completed_future.error_message()); } }, nullptr);
אפשר להתאים אישית את תבנית האימייל שבה נעשה שימוש בכרטיסייה Templates (תבניות) בקטע Security (אבטחה) > Authentication (אימות) במסוף Firebase. מידע נוסף זמין במאמר תבניות אימייל במרכז העזרה של Firebase.
אפשר גם לשלוח אימיילים לאיפוס סיסמה דרך Firebaseהמסוף.
מחיקת משתמש
אפשר למחוק חשבון משתמש באמצעות השיטה Delete. לדוגמה:
firebase::auth::User user = auth->current_user(); if (user.is_valid()) { user.Delete().OnCompletion( [](const firebase::Future<void>& completed_future, void* user_data) { if (completed_future.error() == 0) { // User deleted. } else { // An error happened. printf("Error %d: %s", completed_future.error(), completed_future.error_message()); } }, nullptr); }
אפשר גם למחוק משתמשים במסוף Firebase בכרטיסייה משתמשים שבקטע אבטחה > אימות.
אימות מחדש של משתמש
כדי לבצע פעולות מסוימות שקשורות לאבטחה, כמו מחיקת חשבון, הגדרת כתובת אימייל ראשית ושינוי סיסמה, המשתמש צריך להיכנס לחשבון שלו לאחרונה. אם מבצעים אחת מהפעולות האלה והמשתמש נכנס לחשבון לפני זמן רב מדי, הפעולה נכשלת.
במקרה כזה, צריך לבצע אימות מחדש של המשתמש על ידי קבלת פרטי כניסה חדשים מהמשתמש והעברת פרטי הכניסה אל Reauthenticate. לדוגמה:
firebase::auth::User user = auth->current_user(); // Get auth credentials from the user for re-authentication. The example // below shows email and password credentials but there are multiple // possible providers, such as GoogleAuthProvider or FacebookAuthProvider. firebase::auth::Credential credential = firebase::auth::EmailAuthProvider::GetCredential("user@example.com", "password1234"); if (user.is_valid()) { user.Reauthenticate(credential) .OnCompletion( [](const firebase::Future<void>& completed_future, void* user_data) { if (completed_future.error() == 0) { printf("User re-authenticated."); } }, nullptr); }
ייבוא חשבונות משתמשים
אתם יכולים לייבא חשבונות משתמשים מקובץ לפרויקט Firebase באמצעות הפקודה auth:import של Firebase CLI. לדוגמה:
firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14