חבר את האפליקציה שלך לאמולטור האימות

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

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

מה אני יכול לעשות עם אמולטור האימות?

אמולטור האימות מספק אמולציה מקומית ברמת נאמנות גבוהה של שירותי אימות Firebase, ומספק הרבה מהפונקציונליות שנמצאת באימות Firebase בייצור . בשילוב עם פלטפורמות Apple, אנדרואיד ו-Web Firebase SDK, האמולטור מאפשר לך:

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

בחר פרויקט Firebase

Firebase Local Emulator Suite מחקה מוצרים עבור פרויקט Firebase יחיד.

כדי לבחור את הפרויקט לשימוש, לפני שתפעיל את האמולטורים, ב-CLI הפעל firebase use בספריית העבודה שלך. לחלופין, אתה יכול להעביר את דגל --project לכל פקודת אמולטור.

Local Emulator Suite תומכת באמולציה של פרויקטים אמיתיים של Firebase ופרויקטי הדגמה .

סוג פרויקט מאפיינים השתמש עם אמולטורים
אמיתי

פרויקט Firebase אמיתי הוא פרויקט שיצרת והגדרת (ככל הנראה דרך מסוף Firebase).

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

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

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

הַדגָמָה

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

מזהי פרויקטים עבור פרויקטי הדגמה כוללים את קידומת demo- .

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

אנו ממליצים להשתמש בפרויקטי הדגמה בכל מקום אפשרי. ההטבות כוללות:

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

מכשיר את האפליקציה שלך לדבר עם האמולטור

ערכות SDK של אנדרואיד, iOS ו-web

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

Kotlin+KTX
Firebase.auth.useEmulator("10.0.2.2", 9099)
Java
FirebaseAuth.getInstance().useEmulator("10.0.2.2", 9099);
מָהִיר
Auth.auth().useEmulator(withHost:"127.0.0.1", port:9099)

Web modular API

import { getAuth, connectAuthEmulator } from "firebase/auth";

const auth = getAuth();
connectAuthEmulator(auth, "http://127.0.0.1:9099");

Web namespaced API

const auth = firebase.auth();
auth.useEmulator("http://127.0.0.1:9099");

אין צורך בהגדרה נוספת כדי לאבטיפוס ולבדוק אינטראקציות בין אימות ופונקציות ענן או כללי אבטחה של Firebase עבור Cloud Firestore או Realtime Database. כאשר אמולטור האימות מוגדר ואמולטורים אחרים פועלים, הם פועלים באופן אוטומטי יחד.

ערכות SDK לניהול

ערכות ה-SDK של Firebase Admin מתחברות אוטומטית לאמולטור האימות כאשר משתנה הסביבה FIREBASE_AUTH_EMULATOR_HOST מוגדר.

export FIREBASE_AUTH_EMULATOR_HOST="127.0.0.1:9099"

שימו לב שהאמולטור של Cloud Functions מודע אוטומטית לאמולטור האימות כך שתוכל לדלג על שלב זה בעת בדיקת אינטגרציות בין פונקציות ענן ואמולטורים של אימות. משתנה הסביבה יוגדר אוטומטית עבור ה-Admin SDK ב-Cloud Functions.

עם הגדרת משתני הסביבה, ערכות SDK של Firebase Admin יקבלו אסימוני מזהים לא חתומים וקובצי Cookie של הפעלה שהונפקו על ידי אמולטור האימות (באמצעות שיטות verifyIdToken ו- createSessionCookie בהתאמה) כדי להקל על פיתוח ובדיקות מקומיות. אנא הקפד לא להגדיר את משתנה הסביבה בייצור.

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

Node.js Admin SDK
admin.initializeApp({ projectId: "your-project-id" });
משתנה הסביבה
export GCLOUD_PROJECT="your-project-id"

אסימוני זיהוי

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

הפעל את האמולטור

אתה יכול להשתמש באמולטור האימות באופן אינטראקטיבי דרך ממשק המשתמש של Emulator Suite ולא אינטראקטיבי דרך ממשק ה-REST המקומי שלו. הסעיפים הבאים מכסים מקרי שימוש אינטראקטיביים ולא אינטראקטיביים.

כדי להפעיל את אמולטור האימות, את ממשק ה-REST שלו ואת ממשק המשתמש של Emulator Suite, בצע:

firebase emulators:start

עבור אימות אנונימי , האפליקציה שלך יכולה להפעיל את היגיון הכניסה עבור הפלטפורמה שלך ( iOS , Android , אינטרנט ).

עבור אימות דוא"ל/סיסמה , אתה יכול להתחיל ליצור אב טיפוס על ידי הוספת חשבונות משתמש לאמולטור האימות מהאפליקציה שלך באמצעות שיטות Authentication SDK, או על ידי שימוש בממשק המשתמש של Emulator Suite.

  1. בממשק המשתמש של Emulator Suite, לחץ על הכרטיסייה Authentication .
  2. לחץ על כפתור הוסף משתמש .
  3. עקוב אחר אשף יצירת חשבון המשתמש, ומלא את שדות אימות הדוא"ל.

עם יצירת משתמש בדיקה, האפליקציה שלך יכולה להיכנס ולצאת מהמשתמש עם לוגיקה של SDK עבור הפלטפורמה שלך ( iOS , Android , אינטרנט ).

לבדיקת אימות/כניסה לדוא"ל עם זרימות קישורי דוא"ל, האמולטור מדפיס כתובת URL למסוף שבו הופעלו firebase emulators:start .

i  To verify the email address customer@ex.com, follow this link:
http://127.0.0.1:9099/emulator/action?mode=verifyEmail&lang=en&oobCode=XYZ123&apiKey=fake-api-key

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

{
  "authEmulator": {
    "success": "The email has been successfully verified.",
    "email": "customer@example.com"
  }
}

לבדיקת איפוסי סיסמאות, האמולטור מדפיס כתובת URL דומה, כולל פרמטר newPassword (שאותו תוכל לשנות לפי הצורך), למסוף.

http://127.0.0.1:9099/emulator/action?mode=resetPassword&oobCode=XYZ!23&apiKey=fake-api-key&newPassword=YOUR_NEW_PASSWORD

בדיקות לא אינטראקטיביות

במקום להשתמש בממשק המשתמש של Emulator Suite או בקוד הלקוח לניהול חשבונות משתמש בדוא"ל/סיסמה, אתה יכול לכתוב סקריפטים להגדרת בדיקה הקוראים ל-REST APIs כדי ליצור ולמחוק חשבונות משתמש ולהביא קודי אימות דוא"ל מחוץ לתחום כדי לאכלס את אימות הדוא"ל של האמולטור כתובת אתר. זה שומר על פלטפורמה וקוד בדיקה נפרדים ומאפשר לך לבדוק באופן לא אינטראקטיבי.

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

  1. צור משתמשים עם נקודת הקצה REST של רישום אימות.
  2. היכנס למשתמשים באמצעות הדוא"ל והסיסמאות כדי לבצע בדיקות.
  3. אם רלוונטי לבדיקות שלך, אחזר קודי אימות דוא"ל זמינים מחוץ לתחום מנקודת הקצה הספציפית של REST לאמולטור .
  4. שטף את רשומות המשתמש עם נקודת הקצה הספציפית של REST לאמולטור לניקוי נתונים.

אימות טלפון/SMS מדומה

עבור אימות טלפון, אמולטור Auth אינו תומך ב:

  • זרימות reCAPTCHA ו-APN. לאחר ההגדרה לאינטראקציה עם האמולטור, ערכות SDK של לקוח משביתות את שיטות האימות הללו בצורה דומה לזו שתוארה עבור בדיקות אינטגרציה ( iOS , Android , אינטרנט ).
  • בדוק מספרי טלפון עם קודים שהוגדרו מראש במסוף Firebase.

אחרת, מבחינת קוד הלקוח, זרימת האימות של הטלפון/SMS זהה לזו שתוארה לייצור ( iOS , Android , אינטרנט ).

שימוש בממשק המשתמש של Emulator Suite:

  1. בממשק המשתמש של Emulator Suite, לחץ על הכרטיסייה Authentication .
  2. לחץ על כפתור הוסף משתמש .
  3. עקוב אחר אשף יצירת חשבון המשתמש, מלא את שדות האימות של הטלפון.

עם זאת, עבור זרימות אימות טלפוני, האמולטור לא יפעיל מסירה של הודעות טקסט כלשהן, מכיוון שיצירת קשר עם ספק היא מחוץ לתחום ואינה ידידותית לבדיקה מקומית! במקום זאת, האמולטור מדפיס את הקוד שהיה נשלח ב-SMS לאותו מסוף שבו הרצתם firebase emulators:start ; הזן קוד זה לאפליקציה כדי לדמות משתמשים הבודקים את הודעות הטקסט שלהם.

בדיקות לא אינטראקטיביות

לבדיקת אימות טלפון לא אינטראקטיבי, השתמש באמולטור האימות REST API כדי לאחזר קודי SMS זמינים. שים לב שהקוד שונה בכל פעם שאתה מתחיל את הזרימה.

הרצף האופייני הוא כדלקמן.

  1. התקשר לפלטפורמה signInWithPhoneNumber כדי להתחיל בתהליך האימות.
  2. אחזר את קוד האימות באמצעות נקודת הקצה REST הספציפית לאמולטור .
  3. התקשר ל- confirmationResult.confirm(code) כרגיל עם קוד האימות.

SMS רב גורמי

אמולטור האימות תומך ביצירת אב טיפוס ובדיקת תזרימי אימות מרובה-גורמי SMS (MFA) הזמינים בייצור עבור iOS , אנדרואיד ואינטרנט .

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

אימות ספק זהות של צד שלישי (IDP) מדומה

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

באופן כללי, אתה יכול להשתמש ב-SDK של Firebase כדי לאמת באחת משתי דרכים:

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

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

בדיקת זרימות IDP מונעות על ידי Firebase SDK

אם האפליקציה שלך משתמשת בכל זרימת Firebase SDK מקצה לקצה, כמו OAuthProvider לכניסה עם Microsoft, GitHub או Yahoo, לבדיקות אינטראקטיביות, אמולטור האימות מגיש גרסה מקומית של דף הכניסה המתאים כדי לעזור לך לבדוק אימות מאפליקציות אינטרנט הקוראות לשיטת signinWithPopup או signInWithRedirect . דף הכניסה הזה המוגש באופן מקומי מופיע גם באפליקציות לנייד, מעובד על ידי ספריית תצוגות האינטרנט של הפלטפורמה שלך.

האמולטור יוצר חשבונות משתמש מדומים ואישורים של צד שלישי לפי הצורך ככל שהזרימות מתמשכות.

בדיקת זרימות IDP עם שליפה ידנית של אישורים

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

שים לב שהאמולטור תומך רק באימות signInWithCredential עבור אישורים שאוחזרו מ-Google Sign-In, Apple וספקים אחרים המשתמשים באסימוני מזהה המיושמים כ-JSON Web Tokens (JWTs). אסימוני גישה (למשל אלה שסופקו על ידי פייסבוק או טוויטר, שאינם JWTs) אינם נתמכים. הסעיף הבא דן בחלופה במקרים אלו.

בדיקות לא אינטראקטיביות

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

לחלופין, תוכל לעדכן את הקוד שלך לשימוש signInWithCredential (למשל בענף קוד) ולהשתמש בזרימת אימות אסימון עם אסימוני מזהה מדומים עבור חשבונות במקום אישורים אמיתיים.

  1. חוט מחדש או הערה את החלק של הקוד שלך המאחזר idTokens מה-IDP; זה מסיר את הצורך להזין שמות משתמש וסיסמאות אמיתיים במהלך הבדיקות שלך, ומשחרר את הבדיקות שלך ממכסות API ומגבלות תעריפים ב-IDP.
  2. שנית, השתמש במחרוזת JSON מילולית במקום האסימון עבור signInWithCredential . באמצעות SDK האינטרנט כדוגמה, אתה יכול לשנות את הקוד ל:
firebase.auth().signInWithCredential(firebase.auth.GoogleAuthProvider.credential(
  '{"sub": "abc123", "email": "foo@example.com", "email_verified": true}'
));

בשימוש עם האמולטור, קוד זה יאמת בהצלחה משתמש עם דוא"ל foo@example.com ב-Google. חשבו על שדה המשנה כמפתח ראשי, אותו ניתן לשנות לכל מחרוזת, תוך לעג לכניסה למשתמשים שונים. אתה יכול להחליף firebase.auth.GoogleAuthProvider ב- new firebase.auth.OAuthProvider('yahoo.com') או בכל מזהה ספק אחר שאתה רוצה ללעוג לו.

אימות אסימון מותאם אישית מדומה

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

כיצד אמולטור האימות שונה מהייצור

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

ענן IAM

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

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

כניסה של צד שלישי

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

אישורים אמיתיים מספקי OpenID Connect כגון Google ואפל מתקבלים על ידי אמולטור האימות. אישורים מספקים שאינם של OpenID Connect אינם נתמכים.

כניסה בדוא"ל / SMS

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

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

אימות אסימון מותאם אישית

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

הגבלת תעריפים / נגד שימוש לרעה

אמולטור האימות אינו משכפל תכונות מגבילות קצב ייצור או נגד שימוש לרעה.

פונקציות חסימה

בהפקה, משתמשים נכתבים לאחסון פעם אחת לאחר הפעלת אירועי beforeCreate וגם beforeSignIn . עם זאת, עקב מגבלות טכניות, אמולטור האימות כותב לאחסון פעמיים, פעם אחת לאחר יצירת המשתמש ושנייה לאחר הכניסה. משמעות הדבר היא שעבור משתמשים חדשים, אתה יכול לקרוא בהצלחה getAuth().getUser() ב- beforeSignIn באמולטור האימות, אך תיתקל בשגיאה בביצוע זאת בייצור.

מה הלאה?