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

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

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

  1. מוסיפים את Firebase לפרויקט JavaScript.
  2. אם עדיין לא קישרתם את האפליקציה לפרויקט Firebase, תוכלו לעשות זאת דרך מסוף Firebase.
  3. מפעילים את האימות האנונימי:
    1. במסוף Firebase, פותחים את הקטע Auth.
    2. בדף Sign-in Methods מפעילים את שיטת הכניסה Anonymous.
    3. אופציונלי: אם שדרגתם את הפרויקט ל-Firebase Authentication with Identity Platform, תוכלו להפעיל ניקוי אוטומטי. כשמפעילים את ההגדרה הזו, חשבונות אנונימיים שנוצרו לפני יותר מ-30 יום נמחקים באופן אוטומטי. בפרויקטים שבהם הפעלתם את הניקוי האוטומטי, אימות אנונימי לא ייספר יותר במסגרת מגבלות השימוש או המכסות לחיוב. ניקוי אוטומטי

אימות אנונימי ב-Firebase

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

  1. קוראים לשיטה signInAnonymously:

    Web

    import { getAuth, signInAnonymously } from "firebase/auth";
    
    const auth = getAuth();
    signInAnonymously(auth)
      .then(() => {
        // Signed in..
      })
      .catch((error) => {
        const errorCode = error.code;
        const errorMessage = error.message;
        // ...
      });

    Web

    firebase.auth().signInAnonymously()
      .then(() => {
        // Signed in..
      })
      .catch((error) => {
        var errorCode = error.code;
        var errorMessage = error.message;
        // ...
      });
    כאן אפשר גם לזהות שגיאות ולטפל בהן. רשימה של קודי שגיאה מופיעה במאמר Auth Reference Docs.
  2. אם השיטה signInAnonymously מסתיימת ללא שגיאה, המתבונן שמופיע ב-onAuthStateChanged יופעל ותוכלו לקבל את נתוני החשבון של המשתמש האנונימי מהאובייקט User:

    Web

    import { getAuth, onAuthStateChanged } from "firebase/auth";
    
    const auth = getAuth();
    onAuthStateChanged(auth, (user) => {
      if (user) {
        // User is signed in, see docs for a list of available properties
        // https://firebase.google.com/docs/reference/js/auth.user
        const uid = user.uid;
        // ...
      } else {
        // User is signed out
        // ...
      }
    });

    Web

    firebase.auth().onAuthStateChanged((user) => {
      if (user) {
        // User is signed in, see docs for a list of available properties
        // https://firebase.google.com/docs/reference/js/v8/firebase.User
        var uid = user.uid;
        // ...
      } else {
        // User is signed out
        // ...
      }
    });

המרת חשבון אנונימי לחשבון קבוע

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

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

    כניסה באמצעות חשבון Google

    Web

    import { GoogleAuthProvider } from "firebase/auth";
    
    const credential = GoogleAuthProvider.credential(
      googleUser.getAuthResponse().id_token);

    Web

    var credential = firebase.auth.GoogleAuthProvider.credential(
      googleUser.getAuthResponse().id_token);
    התחברות באמצעות חשבון Facebook

    Web

    import { FacebookAuthProvider } from "firebase/auth";
    
    const credential = FacebookAuthProvider.credential(
      response.authResponse.accessToken);

    Web

    var credential = firebase.auth.FacebookAuthProvider.credential(
      response.authResponse.accessToken);
    כניסה באמצעות כתובת אימייל וסיסמה

    Web

    import { EmailAuthProvider } from "firebase/auth";
    
    const credential = EmailAuthProvider.credential(email, password);

    Web

    var credential = firebase.auth.EmailAuthProvider.credential(email, password);
  3. מעבירים את האובייקט AuthCredential לשיטה link של משתמש הכניסה:

    Web

    import { getAuth, linkWithCredential } from "firebase/auth";
    
    const auth = getAuth();
    linkWithCredential(auth.currentUser, credential)
      .then((usercred) => {
        const user = usercred.user;
        console.log("Anonymous account successfully upgraded", user);
      }).catch((error) => {
        console.log("Error upgrading anonymous account", error);
      });

    Web

    auth.currentUser.linkWithCredential(credential)
      .then((usercred) => {
        var user = usercred.user;
        console.log("Anonymous account successfully upgraded", user);
      }).catch((error) => {
        console.log("Error upgrading anonymous account", error);
      });

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

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

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

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

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

השלבים הבאים

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