אימות אנונימי ב-Firebase באמצעות C++‎

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

לפני שמתחילים

  1. איך מוסיפים את Firebase לפרויקט C++‎
  2. אם עדיין לא קישרתם את האפליקציה לפרויקט Firebase, אתם צריכים לעשות זאת דרך מסוף Firebase.
  3. הפעלת אימות אנונימי:
    1. במסוף Firebase, עוברים אל Security (אבטחה) > Authentication (אימות).
    2. בכרטיסייה שיטת התחברות, מפעילים את ספק הכניסה אנונימי.
    3. אופציונלי: אם שדרגתם את הפרויקט ל-Firebase Authentication with Identity Platform, אתם יכולים להפעיל ניקוי אוטומטי. אם מפעילים את ההגדרה הזו, חשבונות אנונימיים שנוצרו לפני יותר מ-30 יום יימחקו באופן אוטומטי. בפרויקטים שבהם מופעלת מחיקה אוטומטית, אימות אנונימי לא ייספר יותר במגבלות השימוש או במכסות החיוב. מידע נוסף זמין במאמר בנושא ניקוי אוטומטי.

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

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

המחלקות Auth הן שער הכניסה לכל הקריאות ל-API.
  1. מוסיפים את קובצי הכותרת של Auth ו-App:
    #include <cassert>
    #include <cstdint>
    
    #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::SignInAnonymously.
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInAnonymously();
  • אם התוכנית שלכם כוללת לולאת עדכון שפועלת באופן קבוע (למשל 30 או 60 פעמים בשנייה), אתם יכולים לבדוק את התוצאות פעם אחת בכל עדכון באמצעות Auth::SignInAnonymouslyLastResult:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInAnonymouslyLastResult();
    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());
      }
    }
    לחלופין, אם התוכנית מבוססת על אירועים, אפשר לרשום קריאה חוזרת ב-Future.
  • המרת חשבון אנונימי לחשבון קבוע

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

    1. כשהמשתמש נרשם, צריך להשלים את תהליך הכניסה לספק האימות של המשתמש עד לשלב של קריאה לאחת משיטות Auth::SignInWith, אבל לא כולל השלב הזה. לדוגמה, קבלת טוקן מזהה של Google, טוקן גישה של פייסבוק או כתובת אימייל וסיסמה של המשתמש.
    2. מקבלים auth::Credential עבור ספק האימות החדש:

      כניסה לחשבון Google
      firebase::auth::Credential credential =
          firebase::auth::GoogleAuthProvider::GetCredential(google_id_token,
                                                            nullptr);
      התחברות באמצעות Facebook
      firebase::auth::Credential credential =
          firebase::auth::FacebookAuthProvider::GetCredential(access_token);
      כניסה באמצעות אימייל וסיסמה
      firebase::auth::Credential credential =
          firebase::auth::EmailAuthProvider::GetCredential(email, password);
    3. מעבירים את האובייקט auth::Credential לשיטה LinkWithCredential של המשתמש שנכנס:

      // Link the new credential to the currently active user.
      firebase::auth::User current_user = auth->current_user();
      firebase::Future<firebase::auth::AuthResult> result =
          current_user.LinkWithCredential(credential);

    אם הקריאה אל LinkWithCredential מצליחה, המשתמש בחשבון החדש יכול לגשת לנתוני Firebase של החשבון האנונימי.

    ניקוי אוטומטי

    אם שדרגתם את הפרויקט ל-Firebase Authentication with Identity Platform, אתם יכולים להפעיל ניקוי אוטומטי במסוף Firebase. כשמפעילים את התכונה הזו, מאפשרים ל-Firebase למחוק באופן אוטומטי חשבונות אנונימיים שנוצרו לפני יותר מ-30 יום. בפרויקטים שבהם מופעל ניקוי אוטומטי, אימות אנונימי לא נספר במגבלות השימוש או במכסות החיוב.

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

    אם אתם רוצים לראות כמה משתמשים יושפעו לפני שתפעילו את התכונה הזו, ושדרגתם את הפרויקט ל-Firebase Authentication with Identity Platform, תוכלו לסנן לפי is_anon ב-Cloud Logging.

    השלבים הבאים

    עכשיו, אחרי שהמשתמשים יכולים לעבור אימות ב-Firebase, אתם יכולים לשלוט בגישה שלהם לנתונים במסד הנתונים של Firebase באמצעות כללי Firebase.