אתם יכולים לאפשר למשתמשים לבצע אימות ב-Firebase באמצעות ספקי OAuth כמו Yahoo. לשם כך, משלבים באפליקציה כניסה גנרית מבוססת-אינטרנט באמצעות OAuth באמצעות Firebase SDK כדי לבצע את תהליך הכניסה מקצה לקצה. מכיוון שהתהליך הזה מחייב שימוש ב-Firebase SDK לנייד, הוא נתמך רק בפלטפורמות Android ו-Apple.
לפני שמתחילים
לפני שמשתמשים 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;
איך מבצעים את תהליך הכניסה באמצעות Firebase SDK
כדי לטפל בתהליך הכניסה באמצעות Firebase SDK:
יוצרים מופע של
FederatedOAuthProviderData
שמוגדר עם מזהה הספק המתאים ל-Yahoo.Firebase.Auth.FederatedOAuthProviderData providerData = new Firebase.Auth.FederatedOAuthProviderData(); providerData.ProviderId = Firebase.Auth.YahooAuthProvider.ProviderId;
אופציונלי: מציינים פרמטרים מותאמים אישית נוספים של OAuth שרוצים להגדיר שליחה עם בקשת ה-OAuth.
providerData.CustomParameters = new Dictionary<string,string>; // Prompt user to re-authenticate to Yahoo. providerData.CustomParameters.Add("prompt", "login"); // Localize to French. providerData.CustomParameters.Add("language", "fr");
הפרמטרים שבהם Yahoo תומכת מפורטים במסמכי התיעוד של Yahoo OAuth. שימו לב שאי אפשר להעביר פרמטרים שנדרשים ל-Firebase עם
custom_parameters()
הפרמטרים האלה הם client_id, redirect_uri, response_type, scope ו-state.אופציונלי: אפשר לציין היקפי הרשאות OAuth 2.0 נוספים, מעבר ל-
profile
וכןemail
שברצונך לבקש מספק האימות. אם נדרשת גישה לנתוני משתמשים פרטיים מ-Yahoo APIs, תצטרכו לבקש הרשאות ל-Yahoo APIs בקטע הרשאות API Yahoo Developer Console. היקפי ההרשאות המבוקשים של OAuth חייבים להיות התאמות מדויקות מוגדרים מראש בהרשאות ה-API של האפליקציה. לדוגמה, אם בוחרים בקריאה/כתיבה הם מתבקשים לגשת לאנשי הקשר של המשתמשים, והם מוגדרים מראש ב-API של האפליקציה הרשאות, צריך להעביר אתsdct-w
במקום היקף הרשאות ה-OAuth לקריאה בלבדsdct-r
. אחרת,התהליך ייכשל ותוצג שגיאה למשתמש קצה.providerData.Scopes = new List<string>(); // Request access to Yahoo Mail API. providerData.Scopes.Add("mail-r"); // This must be preconfigured in the app's API permissions. providerData.Scopes.Add("sdct-w");
למידע נוסף, אפשר לעיין במסמכי התיעוד בנושא היקפי הרשאה ב-Yahoo.
אחרי שהגדרתם את נתוני הספק, השתמשו בהם כדי ליצור FedeatedOAuthProvider.
// Construct a FederatedOAuthProvider for use in Auth methods. Firebase.Auth.FederatedOAuthProvider provider = new Firebase.Auth.FederatedOAuthProvider(); provider.SetProviderData(providerData);
אימות באמצעות Firebase באמצעות אובייקט ספק האימות. שימו לב שבניגוד ל- פעולות אחרות של FirebaseAuth – הן יכולות לשלוט בממשק המשתמש שלכם על ידי הקפצה תצוגת אינטרנט שבה המשתמש יכול להזין את פרטי הכניסה שלו.
כדי להתחיל את תהליך הכניסה, צריך לבצע קריאה ל-
SignInAndRetrieveDataWithCredentialAsync
:
<<../_includes/_sign_in_with_provider_unity.md>>>
הדוגמאות שלמעלה מתמקדות בתהליכי כניסה, אבל אפשר גם לקשר ספק של Yahoo למשתמש קיים באמצעות
LinkWithProviderAsync
. לדוגמה, אפשר לקשר מספר ספקים לאותו משתמש, כדי לאפשר להם להיכנס עם אחד מהם.user.LinkWithProviderAsync(provider).ContinueOnMainThread(task => { if (task.IsCanceled) { Debug.LogError("LinkWithProviderAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("LinkWithProviderAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult authResult = task.Result; Firebase.Auth.FirebaseUser user = authResult.User; Debug.LogFormat("User linked successfully: {0} ({1})", user.DisplayName, user.UserId); });
אפשר להשתמש באותו דפוס עם
ReauthenticateWithProviderAsync
, כדי לאחזר פרטי כניסה עדכניים לפעולות רגישות שדורשות כניסה לאחרונה.user.ReauthenticateWithProviderAsync(provider).ContinueOnMainThread(task => { if (task.IsCanceled) { Debug.LogError("ReauthenticateWithProviderAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError( "ReauthenticateWithProviderAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult authResult = task.Result; Firebase.Auth.FirebaseUser user = authResult.User; Debug.LogFormat("User reauthenticated successfully: {0} ({1})", user.DisplayName, user.UserId); });
מתקדם: טיפול בתהליך הכניסה באופן ידני
בניגוד לספקים אחרים של OAuth שנתמכים על ידי Firebase, כמו Google, Facebook ו-Twitter, שבהם אפשר להיכנס ישירות באמצעות פרטי כניסה שמבוססים על אסימון גישה של OAuth, אימות ב-Firebase לא תומך באותה יכולת עבור ספקים כמו Yahoo, כי שרת האימות ב-Firebase לא יכול לאמת את הקהל של אסימוני הגישה של Yahoo ב-OAuth. זוהי דרישת אבטחה קריטית, והיא עלולה לחשוף אפליקציות ואתרים למתקפות של שחזור, שבהן אפשר להשתמש באסימון גישה של Yahoo OAuth שנוצר לפרויקט אחד (תוקף) כדי להיכנס לפרויקט אחר (קורבן). במקום זאת, Firebase Auth מאפשר לטפל בכל תהליך OAuth ובהחלפת קוד ההרשאה באמצעות מזהה הלקוח והסוד של OAuth שהוגדרו במסוף Firebase. מכיוון שאפשר להשתמש בקוד ההרשאה רק בשילוב עם מזהה לקוח או סוד לקוח ספציפיים, אי אפשר להשתמש בקוד הרשאה שהתקבל לפרויקט אחד בפרויקט אחר.
אם נדרש שימוש בספקים האלה בסביבות לא נתמכות, ספריית OAuth של צד שלישי אימות מותאם אישית ב-Firebase יצטרך להשתמש ב-Gemini. ההגדרה הראשונה נדרשת כדי לבצע אימות מול הספק וגם כדי להחליף את פרטי הכניסה של הספק באסימון מותאם אישית.
השלבים הבאים
אחרי שמשתמש נכנס לחשבון בפעם הראשונה, נוצר חשבון משתמש חדש שמקושר לפרטי הכניסה – כלומר שם המשתמש והסיסמה, מספר הטלפון או פרטי ספק האימות – שבאמצעותם המשתמש נכנס לחשבון. החדש הזה מאוחסנים כחלק מפרויקט 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();