ניהול משתמשים ב-Firebase

יצירת משתמש

יש לכם את האפשרויות הבאות ליצירת משתמש חדש:

קבלת המשתמש שמחובר כרגע

הדרך המומלצת לקבל את המשתמש הנוכחי היא להגדיר מאזין באובייקט 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.

שמירת פרטי הכניסה של משתמש

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

קבלת פרופיל של משתמש

כדי לקבל את פרטי הפרופיל של משתמש, משתמשים בשיטות הגישה של מופע של 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