Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

צור משתמש

אתה יוצר משתמש חדש בפרויקט Firebase שלך על ידי קריאת CreateUserWithEmailAndPassword השיטה או באמצעות כניסה למשתמש בפעם הראשונה באמצעות ספקית זהויות מאוחדת, כגון הכניסה של Google או פייסבוק כניסה .

ניתן גם ליצור משתמשים חדשים-מאומת הסיסמה ממדור אימות של קונסולת 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 != nullptr) {
      // 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);

על ידי שימוש במאזין, אתה מבטיח שאובייקט ה-Auth לא נמצא במצב ביניים - כגון אתחול - כאשר אתה מקבל את המשתמש הנוכחי.

אתה גם יכול לקבל את כרגע משתמש מחובר על ידי התקשרות current_user . אם המשתמש אינו מחובר, current_user מחזיר nullptr.

המשך האישור של משתמש

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

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

כדי לקבל את פרטי הפרופיל של המשתמש, השתמש בשיטות הרצוע של מופע של firebase::auth::User . לדוגמה:

firebase::auth::User* user = auth->current_user();
if (user != nullptr) {
  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 != nullptr) {
  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 != nullptr) {
  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 != nullptr) {
  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 != nullptr) {
  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 עזרה.

הגדר סיסמה של משתמש

באפשרותך להגדיר סיסמת משתמש עם UpdatePassword השיטה. לדוגמה:

firebase::auth::User* user = auth->current_user();
std::string newPassword = "SOME-SECURE-PASSWORD";

if (user != nullptr) {
  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 != nullptr) {
  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 , בעמוד המשתמשים.

אימות מחדש של משתמש

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

כאשר זה קורה, מחדש לאמת את המשתמש על ידי מקבל דף כניסה חדשה אישורים מהמשתמש להעביר את האישורים כדי 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 != nullptr) {
  user->Reauthenticate(credential)
      .OnCompletion(
          [](const firebase::Future<void>& completed_future,
             void* user_data) {
            if (completed_future.error() == 0) {
              printf("User re-authenticated.");
            }
          },
          nullptr);
}

ייבוא ​​חשבונות משתמש

ניתן לייבא חשבונות משתמשים מקובץ לתוך הפרויקט Firebase שלך על ידי שימוש של Firebase CLI auth:import הפקודה. לדוגמה:

firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14