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

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

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

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

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

בחר פרויקט 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

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

דְמוּי אָדָם
FirebaseAuth.getInstance().useEmulator('10.0.2.2', 9099);
מָהִיר
Auth.auth().useEmulator(withHost:"localhost", port:9099)

גרסת אינטרנט 9

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

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

גרסת אינטרנט 8

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

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

Admin SDK

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

export FIREBASE_AUTH_EMULATOR_HOST="localhost:9099"

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

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

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

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, הפעל את Firebase Local Emulator Suite.

firebase emulators:start

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

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

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

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

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

i  To verify the email address customer@ex.com, follow this link:
http://localhost: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://localhost: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. לאחר ההגדרה לאינטראקציה עם האמולטור, ערכות פיתוח של לקוח משביתות את שיטות האימות הללו בצורה דומה לזו שתוארה עבור בדיקות אינטגרציה ( 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) כרגיל עם קוד האימות.

אימות ספק זהות של צד שלישי (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') או בכל מזהה ספק אחר שברצונך ללעוג לו.

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

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

ענן IAM

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

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

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

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

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

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

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

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

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

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

מה הלאה?