יצירת משתמש
יש כמה אפשרויות ליצירת משתמש חדש:
מהאפליקציה: יוצרים משתמש חדש בפרויקט Firebase באמצעות קריאה לשיטה
CreateUserWithEmailAndPasswordאו באמצעות כניסה של משתמש בפעם הראשונה דרך ספק זהויות מאוחדות, כמו כניסה באמצעות חשבון Google או כניסה באמצעות פייסבוק.במסוף Firebase: יוצרים משתמש חדש עם אימות באמצעות סיסמה בכרטיסייה Users (משתמשים) בSecurity (אבטחה) > Authentication (אימות) > Users (משתמשים).
קבלת המשתמש שמחובר כרגע
הדרך המומלצת לקבל את המשתמש הנוכחי היא להגדיר listener באובייקט אימות:
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); }
בדף Email Templates (תבניות אימייל) במסוף Firebase, בקטע Authentication (אימות), אפשר להתאים אישית את תבנית האימייל שבה נעשה שימוש. תוכלו לעיין במאמר בנושא תבניות אימייל במרכז העזרה של Firebase.
הגדרת סיסמה למשתמש
אפשר להגדיר סיסמה למשתמש באמצעות השיטה 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);
אפשר להתאים אישית את תבנית האימייל שבה נעשה שימוש בכרטיסייה תבניות של אבטחה > אימות במסוף 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