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

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

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

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

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

    • אם כבר משתמשים ב-Firebase בפרויקט שלכם ב-Unity, הוא כבר רשום ב-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);
    });

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

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

כדי להגדיר מדיניות סיסמאות לפרויקט, פותחים את הכרטיסייה Password policy בדף Authentication Settings במסוף 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, אפשר לקבל את מזהה המשתמש הייחודי של המשתמש שנכנס לחשבון מהמשתנה auth, ולהשתמש בו כדי לקבוע לאילו נתונים למשתמש תהיה גישה.

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

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

auth.SignOut();