תחילת העבודה עם אימות ב-Firebase ב-C++

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

קישור פרויקט C++‎ ל-Firebase

לפני שתוכלו להשתמש ב-Firebase Authentication, אתם צריכים:

  • רושמים את פרויקט C++‎ ומגדירים אותו לשימוש ב-Firebase.

    אם פרויקט C++ שלכם כבר משתמש ב-Firebase, הוא כבר רשום ומותאם ל-Firebase.

  • מוסיפים את Firebase C++ SDK לפרויקט C++‎.

שימו לב שהוספת Firebase לפרויקט C++ כוללת משימות גם במסוף Firebase וגם בפרויקט C++ הפתוח (לדוגמה, אתם מורידים קובצי תצורה של Firebase מהמסוף ואז מעבירים אותם לפרויקט C++).

רישום משתמשים חדשים

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

firebase::Future<firebase::auth::AuthResult> result =
    auth->CreateUserWithEmailAndPassword(email, password);

אפשר לבדוק את הסטטוס של פעולת יצירת החשבון על ידי רישום קריאה חוזרת (callback) באובייקט CreateUserWithEmailAndPasswordLastResult Future, או על ידי שליחת שאילתה לסטטוס בלולאת העדכון, אם אתם כותבים משחק או אפליקציה עם לולאת עדכון תקופתית כלשהי.

לדוגמה, שימוש ב-Future:

firebase::Future<firebase::auth::AuthResult> result =
    auth->CreateUserWithEmailAndPasswordLastResult();

// The lambda has the same signature as the callback function.
result.OnCompletion(
    [](const firebase::Future<firebase::auth::AuthResult>& 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);

לחלופין, כדי להשתמש ב-polling, אפשר לעשות משהו כמו בדוגמה הבאה בלולאת העדכון של המשחק:

firebase::Future<firebase::auth::AuthResult> result =
    auth->CreateUserWithEmailAndPasswordLastResult();
if (result.status() == firebase::kFutureStatusComplete) {
  if (result.error() == firebase::auth::kAuthErrorNone) {
    firebase::auth::AuthResult* auth_result = *result.result();
    printf("Create user succeeded for email %s\n", auth_result.user.email().c_str());
  } else {
    printf("Created user failed with error '%s'\n", result.error_message());
  }
}

כניסה של משתמשים קיימים

יוצרים טופס שמאפשר למשתמשים קיימים להיכנס באמצעות כתובת האימייל והסיסמה שלהם. כשמשתמש משלים את הטופס, קוראים לשיטה SignInWithEmailAndPassword:

firebase::Future<firebase::auth::AuthResult> result =
    auth->SignInWithEmailAndPassword(email, password);

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

הגדרת מאזין למצב אימות וקבלת נתוני חשבון

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

יוצרים את ה-listener על ידי הטמעה של המחלקה המופשטת firebase::auth::AuthStateListener. לדוגמה, כדי ליצור מאזין שמקבל מידע על המשתמש כשמשתמש נכנס לחשבון בהצלחה:

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());
      const std::string displayName = user.DisplayName();
      const std::string emailAddress = user.Email();
      const std::string photoUrl = user.PhotoUrl();
    } else {
      // User is signed out
      printf("OnAuthStateChanged: signed_out\n");
    }
    // ...
  }
};

מצרפים את ה-listener באמצעות השיטה AddAuthStateListener של האובייקט firebase::auth::Auth:

MyAuthStateListener state_change_listener;
auth->AddAuthStateListener(&state_change_listener);

השלבים הבאים

איך מוסיפים תמיכה בספקי זהויות אחרים ובחשבונות אורחים אנונימיים