אימות עם Firebase באמצעות חשבונות מבוססי-סיסמה באמצעות Unity

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

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

כדי להשתמש ב-Firebase Authentication, צריך:

  • רושמים את הפרויקט ב-Unity ומגדירים אותו לשימוש ב-Firebase.

    • אם פרויקט Unity שלכם כבר משתמש ב-Firebase, הוא כבר רשום ומותאם ל-Firebase.

    • אם אין לכם פרויקט Unity, אתם יכולים להוריד אפליקציה לדוגמה.

  • מוסיפים את Firebase Unity SDK (במיוחד את FirebaseAuth.unitypackage) לפרויקט Unity.

שימו לב: הוספת Firebase לפרויקט ב-Unity כוללת משימות במסוף Firebase ובפרויקט הפתוח ב-Unity (לדוגמה, הורדת קובצי תצורה של Firebase מהמסוף והעברתם לפרויקט ב-Unity).

גישה לכיתה Firebase.Auth.FirebaseAuth

המחלקות FirebaseAuth הן שער לכל הקריאות ל-API. אפשר לגשת אליה דרך FirebaseAuth.DefaultInstance.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

יצירת חשבון שמבוסס על סיסמה

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

  1. כשמשתמש חדש נרשם באמצעות טופס ההרשמה של האפליקציה, צריך להשלים את כל שלבי האימות של החשבון החדש שהאפליקציה דורשת, כמו אימות הסיסמה של החשבון החדש כדי לוודא שהיא הוזנה בצורה נכונה ועומדת בדרישות המורכבות שלכם.
  2. כדי ליצור חשבון חדש, מעבירים את כתובת האימייל והסיסמה של המשתמש החדש אל FirebaseAuth.CreateUserWithEmailAndPassword:
    auth.CreateUserWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("CreateUserWithEmailAndPasswordAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("CreateUserWithEmailAndPasswordAsync encountered an error: " + task.Exception);
        return;
      }
    
      // Firebase user has been created.
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("Firebase user created successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });

כניסה של משתמש באמצעות כתובת אימייל וסיסמה

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

  1. כשמשתמש מתחבר לאפליקציה שלכם, צריך להעביר את כתובת האימייל והסיסמה שלו אל FirebaseAuth.SignInWithEmailAndPassword:
    auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithEmailAndPasswordAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithEmailAndPasswordAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });
  2. אפשר גם ליצור את פרטי הכניסה ולהיכנס כמו בתהליכי העבודה האחרים:
    Firebase.Auth.Credential credential =
        Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
    auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });

מומלץ: הגדרת מדיניות לסיסמאות

כדי לשפר את אבטחת החשבון, אפשר לאכוף דרישות למורכבות הסיסמה.

כדי להגדיר מדיניות סיסמאות לפרויקט, פותחים את הקטע מדיניות סיסמאות בכרטיסייה הגדרות של אימות > אבטחה במסוף Firebase:

הגדרות אימות

Firebase Authentication כללי המדיניות בנושא סיסמאות תומכים בדרישות הבאות לסיסמאות:

  • חובה להשתמש באותיות קטנות

  • נדרשת אות גדולה

  • חובה להזין תו מספרי

  • נדרש תו שאינו אלפאנומרי

    התווים הבאים עומדים בדרישה לתו שאינו אלפאנומרי: ^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~

  • אורך סיסמה מינימלי (הטווח הוא 6 עד 30 תווים, ברירת המחדל היא 6)

  • אורך הסיסמה המקסימלי (אורך מקסימלי של 4,096 תווים)

אפשר להפעיל את אכיפת המדיניות בנושא סיסמאות בשני מצבים:

  • חובה: ניסיונות ההרשמה ייכשלו עד שהמשתמש יעבור לסיסמה שעומדת בדרישות המדיניות.

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

משתמשים חדשים תמיד נדרשים לבחור סיסמה שעומדת בדרישות המדיניות שלכם.

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

מומלץ: הפעלה של הגנה מפני ספירת כתובות אימייל

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

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

השלבים הבאים

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

  • באפליקציות, אפשר לקבל את פרטי הפרופיל הבסיסיים של המשתמש מאובייקט Firebase.Auth.FirebaseUser:

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // 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 User.TokenAsync() instead.
      string uid = user.UserId;
    }
  • ב-Firebase Realtime Database וב-Cloud Storage Security Rules, אפשר לקבל את מזהה המשתמש הייחודי של המשתמש המחובר מהמשתנה auth, ולהשתמש בו כדי לקבוע לאילו נתונים משתמש יכול לגשת.

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

כדי להוציא משתמש מהחשבון, מתקשרים אל SignOut():

auth.SignOut();