Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

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

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

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

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

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

בחר פרויקט Firebase

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

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

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

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

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

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

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

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

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

אנדרואיד, iOS ו- SDK

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

דְמוּי אָדָם
FirebaseAuth.getInstance().useEmulator('10.0.2.2', 9099);
iOS - סוויפט
Auth.auth().useEmulator(withHost:"localhost", port:9099)

אינטרנט v8

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

אינטרנט v9

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

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

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

מנהל SDK

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

export FIREBASE_AUTH_EMULATOR_HOST="localhost:9099"

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

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

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

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

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

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

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

firebase emulators:start

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

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

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

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

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

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 או בקוד לקוח לניהול חשבונות משתמש בדוא"ל / סיסמה, אתה יכול לכתוב סקריפטים של הגדרת בדיקה שקוראים לממשקי API של REST כדי ליצור ולמחוק חשבונות משתמש ולהביא קודי אימות דוא"ל מחוץ לתחום כדי לאכלס את אימות הדוא"ל של האמולטור. כתובת אתר. זה שומר על פלטפורמת קוד הבדיקה נפרדים ומאפשר לך לבדוק באופן לא אינטראקטיבי.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

בדיקת IDP זורמת עם אחזור אישורים ידני

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

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

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

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

מה הלאה?