אפשר לשלב את Firebase Authentication עם מערכת אימות בהתאמה אישית באמצעות לשנות את שרת האימות כדי להפיק אסימונים חתומים בהתאמה אישית כשמשתמש נכנס בהצלחה. האפליקציה מקבלת את האסימון הזה ומשתמשת בו כדי לבצע אימות מול Firebase.
לפני שמתחילים
- הוספת Firebase לקובץ C++ project.
- משיגים את מפתחות השרת של הפרויקט:
- נכנסים אל חשבונות שירות. בדף ההגדרות של הפרויקט.
- לוחצים על יצירת מפתח פרטי חדש בחלק התחתון של הקטע Firebase Admin SDK בדף חשבונות שירות.
- זוג המפתחות הציבורי/פרטי של חשבון השירות החדש מוגדר באופן אוטומטי שנשמרה במחשב. מעתיקים את הקובץ הזה לשרת האימות.
אימות באמצעות Firebase
המחלקהAuth
היא השער לכל הקריאות ל-API.
- מוסיפים את קובצי הכותרת 'אימות' ו'אפליקציה':
#include "firebase/app.h" #include "firebase/auth.h"
- בקוד האתחול, יוצרים
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__)
- עליך להשיג את הכיתה
firebase::auth::Auth
ל-firebase::App
. יש מיפוי אחד לאחד ביןApp
לביןAuth
.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
Auth::SignInWithCustomToken
באמצעות האסימון משרת האימות.
- כשמשתמשים נכנסים לאפליקציה, צריך לשלוח את פרטי הכניסה שלהם (ל למשל, שם המשתמש והסיסמה שלו) לשרת האימות. השרת בודק את פרטי הכניסה ומחזיר אסימון מותאם אישית אם הם תקפים.
- אחרי שמקבלים את האסימון המותאם אישית משרת האימות, מעבירים
אותו אל
Auth::SignInWithCustomToken
כדי להיכנס למשתמש:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithCustomToken(custom_token);
- אם לתוכנית יש לולאת עדכון שפועלת באופן קבוע (למשל 30 או 60 פעמים לשנייה), אפשר לבדוק את התוצאות פעם לכל עדכון באמצעות
Auth::SignInWithCustomTokenLastResult
: לחלופין, אם התוכנית מבוססת על אירועים, ייתכן שתעדיפו לרשום קריאה חוזרת עתיד.firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithCustomTokenLastResult(); if (result.status() == firebase::kFutureStatusComplete) { if (result.error() == firebase::auth::kAuthErrorNone) { firebase::auth::AuthResult auth_result = *result.result(); printf("Sign in succeeded for `%s`\n", auth_result.user.display_name().c_str()); } else { printf("Sign in failed with error '%s'\n", result.error_message()); } }
השלבים הבאים
אחרי שמשתמש נכנס בפעם הראשונה, נוצר חשבון משתמש חדש שמקושרות לפרטי הכניסה - כלומר שם המשתמש והסיסמה, מספר הטלפון מספר, או פרטים של ספק אימות – המשתמש נכנס באמצעותו. החדש הזה מאוחסנים כחלק מפרויקט Firebase, וניתן להשתמש בהם כדי לזהות משתמש בכל האפליקציות בפרויקט, בלי קשר לאופן שבו המשתמשים נכנסים לחשבון.
-
באפליקציות שלכם, תוכלו לקבל את פרטי הפרופיל הבסיסיים של המשתמש דרך אובייקט
firebase::auth::User
:firebase::auth::User user = auth->current_user(); if (user.is_valid()) { 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 Realtime Database ו-Cloud Storage כללי אבטחה – מקבלים את מזהה המשתמש הייחודי של המשתמש המחובר מהמשתנה
auth
, ולהשתמש בהם כדי לקבוע לאילו נתונים המשתמש יוכל לגשת.
אפשר לאפשר למשתמשים להיכנס לאפליקציה באמצעות מספר סוגי אימות מספקים באמצעות קישור פרטי הכניסה של ספק האימות קיים חשבון משתמש קיים.
כדי לנתק משתמש מהחשבון, יש להתקשר אל
SignOut()
:
auth->SignOut();