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

אמת עם Firebase באמצעות חשבונות מבוססי סיסמה באמצעות C ++

תוכל להשתמש באימות Firebase כדי לאפשר למשתמשים שלך לאמת באמצעות Firebase באמצעות כתובות הדוא"ל והסיסמאות שלהם, ולנהל את החשבונות המבוססים על הסיסמה של האפליקציה שלך.

לפני שאתה מתחיל

  1. להוסיף Firebase לפרויקט C ++ שלך .
  2. אם עדיין לא מחוברת האפליקציה שלך לפרויקט Firebase שלך, לעשות זאת מתוך קונסולת Firebase .
  3. אפשר כניסה לדוא"ל/סיסמה:
    1. בשנות ה קונסולת Firebase , פתח את הקטע המחבר.
    2. 'הכניסה דרך כרטיסיית שיטה, לאפשר כניסת דוא"ל / סיסמא שיטה ולחץ על שמור.

גש firebase::auth::Auth בכיתה

Auth בכיתה היא השער עבור כל השיחות API.
  1. מוסיפים את קבצי הכותרת המחבר ואת App:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. בשנת קוד האתחול שלך, ליצור firebase::App בכיתה.
    #if defined(__ANDROID__)
      firebase::App* app =
          firebase::App::Create(firebase::AppOptions(), my_jni_env, my_activity);
    #else
      firebase::App* app = firebase::App::Create(firebase::AppOptions());
    #endif  // defined(__ANDROID__)
    
  3. רוכש את firebase::auth::Auth כיתה שלך firebase::App . יש אחד-לאחד מיפוי בין App ואת Auth .
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    

צור חשבון מבוסס סיסמה

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

  1. כאשר משתמש חדש נרשם באמצעות טופס ההרשמה לאפליקציה שלך, השלם את כל שלבי אימות החשבון החדשים שהאפליקציה דורשת, כגון אימות שסיסמת החשבון החדש הוקלדה כהלכה ועונה על דרישות המורכבות שלך.
  2. צור חשבון חדש על ידי העברת כתובת האימייל של המשתמש החדש וסיסמה כדי Auth::CreateUserWithEmailAndPassword :
    firebase::Future<firebase::auth::User*> result =
        auth->CreateUserWithEmailAndPassword(email, password);
    
  3. אם התוכנית שלך יש לולאה עדכון שפועל במתכונת קבועה (נניח ב 30 או 60 פעמים בשנייה), אתה יכול לבדוק את התוצאות פעם אחת בכל עדכון עם Auth::CreateUserWithEmailAndPasswordLastResult :
    firebase::Future<firebase::auth::User*> result =
        auth->CreateUserWithEmailAndPasswordLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        firebase::auth::User* user = *result.result();
        printf("Create user succeeded for email %s\n", user->email().c_str());
      } else {
        printf("Created user failed with error '%s'\n", result.error_message());
      }
    }
    
    או, אם התוכנית שלך הוא מונע אירוע, ייתכן שתעדיף כדי לרשום התקשרות על העתיד .

היכנס למשתמש עם כתובת דוא"ל וסיסמה

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

  1. כאשר המשתמש נכנס אל האפליקציה שלך, להעביר את כתובת הדוא"ל של המשתמש והסיסמה כדי firebase::auth::Auth::SignInWithEmailAndPassword :
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithEmailAndPassword(email, password);
    
  2. אם התוכנית שלך יש לולאה עדכון שפועל במתכונת קבועה (נניח ב 30 או 60 פעמים בשנייה), אתה יכול לבדוק את התוצאות פעם אחת בכל עדכון עם Auth::SignInWithEmailAndPasswordLastResult :
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithEmailAndPasswordLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        firebase::auth::User* user = *result.result();
        printf("Sign in succeeded for email %s\n", user->email().c_str());
      } else {
        printf("Sign in failed with error '%s'\n", result.error_message());
      }
    }
    
    או, אם התוכנית שלך הוא מונע אירוע, ייתכן שתעדיף כדי לרשום התקשרות על העתיד .

רשום שיחה חוזרת על עתיד

יש תוכניות מסוימות Update פונקציות נקראות 30 או 60 פעמים בשנייה. לדוגמה, משחקים רבים עוקבים אחר המודל הזה. תוכניות אלה יכולות להתקשר LastResult פונקציות לתשאל שיחות אסינכרוני. עם זאת, אם התוכנית שלך מונעת על ידי אירועים, ייתכן שתעדיף לרשום פונקציות להתקשרות חוזרת. פונקציית שיחה חוזרת נקראת בסיום העתיד.
void OnCreateCallback(const firebase::Future<firebase::auth::User*>& result,
                      void* user_data) {
  // The callback is called when the Future enters the `complete` state.
  assert(result.status() == firebase::kFutureStatusComplete);

  // Use `user_data` to pass-in program context, if you like.
  MyProgramContext* program_context = static_cast<MyProgramContext*>(user_data);

  // Important to handle both success and failure situations.
  if (result.error() == firebase::auth::kAuthErrorNone) {
    firebase::auth::User* user = *result.result();
    printf("Create user succeeded for email %s\n", user->email().c_str());

    // Perform other actions on User, if you like.
    firebase::auth::User::UserProfile profile;
    profile.display_name = program_context->display_name;
    user->UpdateUserProfile(profile);

  } else {
    printf("Created user failed with error '%s'\n", result.error_message());
  }
}

void CreateUser(firebase::auth::Auth* auth) {
  // Callbacks work the same for any firebase::Future.
  firebase::Future<firebase::auth::User*> result =
      auth->CreateUserWithEmailAndPasswordLastResult();

  // `&my_program_context` is passed verbatim to OnCreateCallback().
  result.OnCompletion(OnCreateCallback, &my_program_context);
}
פונקציית callback יכול להיות גם למבדה, אם אתם מעדיפים.
void CreateUserUsingLambda(firebase::auth::Auth* auth) {
  // Callbacks work the same for any firebase::Future.
  firebase::Future<firebase::auth::User*> result =
      auth->CreateUserWithEmailAndPasswordLastResult();

  // The lambda has the same signature as the callback function.
  result.OnCompletion(
      [](const firebase::Future<firebase::auth::User*>& result,
         void* user_data) {
        // `user_data` is the same as &my_program_context, below.
        // Note that we can't capture this value in the [] because std::function
        // is not supported by our minimum compiler spec (which is pre C++11).
        MyProgramContext* program_context =
            static_cast<MyProgramContext*>(user_data);

        // Process create user result...
        (void)program_context;
      },
      &my_program_context);
}

הצעדים הבאים

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

  • באפליקציות שלך, אתה יכול לקבל את המידע הבסיסי של הפרופיל האישי של המשתמש מן 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();
    }
    
  • בבסיס הנתונים בזמן אמת Firebase שלך לאחסון בענן אבטחה חוקי , אתה יכול לקבל את שנכנסים למערכת זיהוי המשתמש הייחודי של המשתמש מן auth משתנה, ולהשתמש בו כדי לקבוע אילו נתונים גישה יכול משתמש.

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

כדי לצאת מהחשבון משתמש, קוראים SignOut() :

auth->SignOut();