אימות עם Firebase באמצעות מערכת אימות מותאמת אישית ו-C++

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

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

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

בצע אימות באמצעות Firebase

מחלקת Auth היא השער לכל קריאות ה-API.
  1. הוסף את קובצי ה-Auth וה-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);
    
התקשר Auth::SignInWithCustomToken עם האסימון משרת האימות שלך.
  1. כאשר משתמשים נכנסים לאפליקציה שלך, שלח את אישורי הכניסה שלהם (לדוגמה, שם המשתמש והסיסמה שלהם) לשרת האימות שלך. השרת שלך בודק את האישורים ומחזיר אסימון מותאם אישית אם הם תקפים.
  2. לאחר שתקבל את האסימון המותאם אישית משרת האימות שלך, העבר אותו ל- Auth::SignInWithCustomToken כדי להיכנס למשתמש:
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithCustomToken(custom_token);
    
  3. אם לתוכנית שלך יש לולאת עדכון שפועלת באופן קבוע (נניח 30 או 60 פעמים בשנייה), אתה יכול לבדוק את התוצאות פעם אחת בכל עדכון עם Auth::SignInWithCustomTokenLastResult :
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithCustomTokenLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        firebase::auth::User* user = *result.result();
        printf("Sign in succeeded for `%s`\n", user->display_name().c_str());
      } else {
        printf("Sign in failed with error '%s'\n", result.error_message());
      }
    }
    
    או, אם התוכנית שלך מונעת על ידי אירועים, אולי תעדיף כדי לרשום התקשרות חוזרת על העתיד .

הצעדים הבאים

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

  • באפליקציות שלך, תוכל לקבל את פרטי הפרופיל הבסיסיים של המשתמש מ- firebase::auth::User object:

    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 ממשתנה האימות, ולהשתמש בו כדי לשלוט לאילו נתונים המשתמש יכול לגשת.

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

כדי לצאת ממשתמש, התקשר ל- SignOut() :

auth->SignOut();