Google is committed to advancing racial equity for Black communities. See how.
דף זה תורגם על ידי Cloud Translation API.
Switch to English

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

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

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

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

גש ל- firebase::auth::Auth class

מחלקת Auth היא השער לכל שיחות ה- API.
  1. הוסף את קבצי הכותרת Auth ו- App:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. בקוד האתחול שלך, צור firebase::App מחלקת 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 עבור firebase::App שלך 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);
}
פונקציית ההתקשרות יכולה להיות גם למבדה, אם אתה מעדיף.
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 :

    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();