Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

נהל משתמשים ב- 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