Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

قم بتوصيل تطبيقك بـ Authentication Emulator

قبل استخدام محاكي مصادقة معك التطبيق، تأكد من أنك تفهم العام المحاكي جناح Firebase المحلية سير العمل ، وأنك تركيب وتكوين والمحاكي جناح المحلية وإعادة النظر في الأوامر CLI .

ماذا يمكنني أن أفعل بمحاكي المصادقة؟

يوفر محاكي مصادقة عالية الدقة مضاهاة المحلية للخدمات مصادقة Firebase، وتوفير الكثير من الوظائف الموجودة في مصادقة Firebase إنتاج . يتيح لك المحاكي ، عند إقرانه مع تطبيقات iOS و Android و Firebase SDK للويب ، ما يلي:

  • إنشاء وتحديث وإدارة حسابات المستخدمين التي تمت محاكاتها لاختبار البريد الإلكتروني / كلمة المرور ورقم الهاتف / الرسائل القصيرة وتسجيل الدخول مع موفري الهوية الخارجيين (مثل Google)
  • عرض وتحرير المستخدمين الذين تمت محاكاتهم
  • تحقق من الرسائل المتعلقة بالمصادقة في علامة التبويب سجلات واجهة مستخدم المحاكي.

اختر مشروع Firebase

يحاكي Firebase Local Emulator Suite المنتجات لمشروع Firebase واحد.

لتحديد المشروع إلى استخدام، قبل البدء في محاكاة، في CLI المدى firebase use في دليل العمل الخاص بك. أو، يمكنك تمرير --project العلم إلى كل أمر المضاهاة.

المحاكي جناح محلي يدعم مضاهاة المشاريع Firebase حقيقية وعرض المشاريع.

نوع المشروع سمات استخدم مع المحاكيات
حقيقة

مشروع Firebase الحقيقي هو المشروع الذي أنشأته وتهيئته (على الأرجح عبر وحدة تحكم Firebase).

تحتوي المشاريع الحقيقية على موارد مباشرة ، مثل طبعات قواعد البيانات أو حاويات التخزين أو الوظائف أو أي مورد آخر تقوم بإعداده لمشروع Firebase هذا.

عند العمل مع مشاريع Firebase الحقيقية ، يمكنك تشغيل برامج محاكاة لأي من المنتجات المدعومة أو جميعها.

للحصول على أي من المنتجات التي لا يتم محاكاة، والتطبيقات الخاصة بك ورمز التفاعل مع الموارد الحية (مثيل قاعدة البيانات، ودلو التخزين، وظيفة، وما إلى ذلك).

تجريبي

مشروع تجريبي Firebase لا يوجد لديه التكوين Firebase الحقيقي وأية موارد الحية. يتم الوصول إلى هذه المشاريع عادةً عبر مختبرات الرموز أو البرامج التعليمية الأخرى.

معرفات مشروع تجريبي المشاريع لديها demo- البادئة.

عند العمل مع عرض مشاريع Firebase، تطبيقاتك وتتفاعل مع كود محاكاة فقط. إذا حاول تطبيقك التفاعل مع مورد لا يعمل المحاكي من أجله ، فسيفشل هذا الرمز.

نوصيك باستخدام المشاريع التجريبية حيثما أمكن ذلك. الفوائد تشمل:

  • إعداد أسهل ، حيث يمكنك تشغيل المحاكيات دون إنشاء مشروع Firebase
  • أمان أقوى ، نظرًا لأنه إذا كانت التعليمات البرمجية الخاصة بك تستدعي عن طريق الخطأ موارد (إنتاج) غير محاكية ، فلا توجد فرصة لتغيير البيانات والاستخدام والفوترة
  • دعم أفضل في وضع عدم الاتصال ، حيث لا توجد حاجة للوصول إلى الإنترنت لتنزيل تكوين SDK الخاص بك.

صك تطبيقك للتحدث إلى محاكي المصادقة

Android و iOS و Web SDK

قم بإعداد التكوين داخل التطبيق أو فصول الاختبار للتفاعل مع محاكي المصادقة على النحو التالي.

ذكري المظهر
FirebaseAuth.getInstance().useEmulator('10.0.2.2', 9099);
iOS - سويفت
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. عند تكوين محاكي المصادقة وتشغيل المحاكيات الأخرى ، فإنها تعمل معًا تلقائيًا.

المسؤول SDK

وFirebase الادارية SDK يربط تلقائيا إلى محاكي مصادقة عندما FIREBASE_AUTH_EMULATOR_HOST تم تعيين متغير البيئة.

export FIREBASE_AUTH_EMULATOR_HOST="localhost:9099"

لاحظ أن محاكي Cloud Functions يدرك تلقائيًا محاكي المصادقة حتى تتمكن من تخطي هذه الخطوة عند اختبار التكامل بين وظائف السحابة ومحاكيات المصادقة. سيتم تعيين متغير البيئة تلقائيًا لـ Admin SDK في وظائف السحابة.

مع مجموعة متغير البيئة، سوف Firebase مسؤول تطوير البرامج استعرض موقعة ID الرموز وجلسة الكوكيز التي تصدرها محاكي مصادقة (عبر verifyIdToken و createSessionCookie طرق على التوالي) لتسهيل developmemt المحلي والاختبار. يرجى التأكد من عدم تعيين متغير البيئة في الإنتاج.

عند الاتصال بمحاكي المصادقة ، ستحتاج إلى تحديد معرّف المشروع. يمكنك تمرير ID مشروع ل initializeApp مباشرة أو تعيين GCLOUD_PROJECT متغير البيئة. لاحظ أنك لست بحاجة إلى استخدام معرف مشروع Firebase الحقيقي ؛ سيقبل محاكي المصادقة أي معرف مشروع.

Node.js Admin SDK
admin.initializeApp({ projectId: "your-project-id" });
متغيرات البيئة
export GCLOUD_PROJECT="your-project-id"

رموز الهوية

لأسباب أمنية، ومصادقة محاكي القضايا الرموز ID غير الموقعة، التي لا تقبل إلا من خلال محاكاة Firebase أخرى، أو Firebase الادارية SDK عند تكوينها . سيتم رفض هذه الرموز المميزة من خلال خدمات Firebase للإنتاج أو Firebase Admin SDK التي تعمل في وضع الإنتاج (على سبيل المثال ، السلوك الافتراضي بدون خطوات الإعداد الموضحة أعلاه).

لبدء النماذج الأولية التفاعلية باستخدام محاكي المصادقة وواجهة مستخدم Emulator Suite ، ابدأ Firebase Local Emulator Suite.

firebase emulators:start

للمصادقة غير معروفة ويمكن التطبيق ممارسة علامة في منطق النظام الأساسي الخاص بك ( دائرة الرقابة الداخلية ، الروبوت ، على شبكة الإنترنت ).

للمصادقة البريد الإلكتروني / كلمة المرور، يمكنك البدء في النماذج عن طريق إضافة حسابات المستخدمين إلى محاكي مصادقة من التطبيق الخاص بك باستخدام أساليب المصادقة SDK، أو باستخدام المحاكي جناح UI.

  1. في المحاكي جناح UI، انقر فوق علامة التبويب مصادقة.
  2. انقر فوق الزر إضافة المستخدم.
  3. اتبع معالج إنشاء حساب المستخدم ، وملء حقول مصادقة البريد الإلكتروني.

مع إنشاء مستخدم اختبار، يمكن التطبيق التوقيع على المستخدم الدخول والخروج مع منطق SDK النظام الأساسي الخاص بك ( دائرة الرقابة الداخلية ، الروبوت ، على شبكة الإنترنت ).

لاختبار التحقق من البريد الالكتروني / تسجيل الدخول مع تدفقات رابط البريد الإلكتروني، المحاكي بطباعة 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 أو رمز العميل لإدارة حسابات مستخدم البريد الإلكتروني / كلمة المرور ، يمكنك كتابة نصوص إعداد اختبار تستدعي REST APIs لإنشاء حسابات مستخدمين وحذفها وجلب رموز التحقق من البريد الإلكتروني خارج النطاق لملء التحقق من البريد الإلكتروني للمحاكي URL. هذا يبقي النظام الأساسي وكود الاختبار منفصلين ويتيح لك الاختبار غير التفاعلي.

بالنسبة إلى تدفقات اختبار البريد الإلكتروني وكلمة المرور غير التفاعلية ، يكون التسلسل النموذجي على النحو التالي.

  1. إنشاء المستخدمين مع مصادقة نقطة النهاية الاشتراك REST .
  2. سجّل دخول المستخدمين باستخدام رسائل البريد الإلكتروني وكلمات المرور لإجراء الاختبارات.
  3. إذا كان ذلك ممكنا لاختبارات الخاص بك، جلب المتاحة خارج النطاق رموز التحقق من البريد الإلكتروني REST endpont محاكي محددة .
  4. سجلات المستخدم تدفق مع نقطة النهاية REST محاكي محددة للبيانات المقاصة.

تمت محاكاة مصادقة الهاتف / الرسائل القصيرة

لمصادقة الهاتف ، لا يدعم محاكي المصادقة:

  • تدفقات reCAPTCHA و APN. وبمجرد تكوين لتتفاعل مع المحاكي، تطوير البرامج العميل تعطيل هذه الأساليب التحقق بطريقة مماثلة لتلك التي وصفها لدمج اختبار ( دائرة الرقابة الداخلية ، الروبوت ، على شبكة الإنترنت ).
  • اختبر أرقام الهواتف باستخدام الرموز المكونة مسبقًا في وحدة تحكم Firebase.

خلاف ذلك، من حيث رمز العميل، وتدفق المصادقة الهاتف / SMS مطابقة لتلك التي وصفها لإنتاج ( دائرة الرقابة الداخلية ، الروبوت ، على شبكة الإنترنت ).

استخدام واجهة مستخدم Emulator Suite:

  1. في المحاكي جناح UI، انقر فوق علامة التبويب مصادقة.
  2. انقر فوق الزر إضافة المستخدم.
  3. اتبع معالج إنشاء حساب المستخدم ، وملء حقول مصادقة الهاتف.

ومع ذلك ، بالنسبة لتدفقات مصادقة الهاتف ، لن يقوم المحاكي بتشغيل تسليم أي رسائل نصية ، نظرًا لأن الاتصال بشركة الاتصالات خارج النطاق وغير مناسب للاختبار المحلي! بدلا من ذلك، يطبع منافس من التعليمات البرمجية التي قد تم إرسالها عبر SMS لنفس المحطة التي قمت بتشغيل firebase emulators:start ؛ أدخل هذا الرمز في التطبيق لمحاكاة فحص المستخدمين لرسائلهم النصية.

اختبار غير تفاعلي

لاختبار مصادقة الهاتف غير التفاعلي ، استخدم واجهة برمجة تطبيقات REST لمحاكي المصادقة لاسترداد رموز SMS المتاحة. لاحظ أن الكود يختلف في كل مرة تبدأ فيها التدفق.

التسلسل النموذجي هو على النحو التالي.

  1. استدعاء منصة signInWithPhoneNumber لبدء عملية التحقق.
  2. استرداد رمز التحقق باستخدام REST نقطة النهاية، منافس محدد .
  3. دعوة confirmationResult.confirm(code) كالمعتاد مع رمز التحقق.

تمت محاكاة مصادقة موفر هوية الطرف الثالث (IDP)

يتيح لك محاكي المصادقة اختبار العديد من تدفقات مصادقة الجهات الخارجية في تطبيقات iOS أو Android أو الويب دون أي تغييرات من رمز الإنتاج. للحصول على أمثلة التدفقات المصادقة، راجع الوثائق لمختلف مجموعات من مقدمي الخدمات والمنصات التي يمكنك استخدامها في التطبيق الخاص بك .

بشكل عام ، يمكنك استخدام Firebase SDK للمصادقة بإحدى طريقتين:

  • يتيح تطبيقك لـ SDK معالجة العملية بالكامل من البداية إلى النهاية ، بما في ذلك جميع التفاعلات مع موفري IDP التابعين لجهات خارجية لاسترداد بيانات الاعتماد.
  • يسترد تطبيقك بيانات الاعتماد يدويًا من موفر جهة خارجية باستخدام SDK لهذا الطرف ويمرر بيانات الاعتماد هذه إلى Authentication SDK.

مرة أخرى ، تحقق من رابط التوثيق أعلاه وتأكد من أنك على دراية بأي تدفق - إدارة Firebase SDK مقابل استرداد بيانات الاعتماد يدويًا - الذي تريد استخدامه. يدعم محاكي المصادقة اختبار أي من الأسلوبين.

اختبار تدفقات IDP التي تعتمد على Firebase SDK

إذا كان يستخدم التطبيق الخاص بك في أي Firebase SDK نهاية إلى نهاية تدفق، مثل OAuthProvider لتسجيل الدخول مع مايكروسوفت، جيثب، أو ياهو، لاختبار تفاعلي، المضاهاة مصادقة يخدم نسخة محلية من تسجيل الدخول المقابلة الصفحة لتساعدك على اختبار المصادقة من تطبيقات الويب التي دعوة signinWithPopup أو signInWithRedirect الأسلوب. تظهر صفحة تسجيل الدخول التي يتم تقديمها محليًا أيضًا في تطبيقات الأجهزة المحمولة ، والتي تقدمها مكتبة عرض الويب في النظام الأساسي الخاص بك.

ينشئ المحاكي حسابات مستخدمين وبيانات اعتماد وهمية لجهات خارجية حسب الحاجة مع استمرار التدفقات.

يتدفق اختبار IDP مع استرجاع بيانات الاعتماد يدويًا

إذا كنت تستخدم "اليدوي" تسجيل الدخول تقنيات وندعو منصة الخاص بك signInWithCredentials الطريقة، ثم، كالعادة، التطبيق الخاص بك وسوف يطلب طرف ثالث الحقيقي تسجيل الدخول واسترداد أوراق حقيقية من طرف ثالث.

علما بأن منافس يعتمد فقط signInWithCredential المصادقة أوراق اعتماد استردادها من جوجل الدخول في، وأبل، والجهات الأخرى التي تستخدم الرموز المميزة ID تنفيذها كما JSON الويب الرموز (JWTs). رموز الوصول (على سبيل المثال تلك التي يوفرها Facebook أو Twitter ، والتي ليست JWTs) غير مدعومة. يناقش القسم التالي بديلًا في هذه الحالات.

اختبار غير تفاعلي

تتمثل إحدى طرق الاختبار غير التفاعلي في أتمتة نقرات المستخدم على صفحة تسجيل الدخول التي يقدمها المحاكي. بالنسبة لتطبيقات الويب ، استخدم واجهة تحكم مثل WebDriver. للجوال ، استخدم أدوات اختبار واجهة المستخدم من النظام الأساسي الخاص بك ، مثل Espresso أو Xcode.

بدلا من ذلك، يمكنك تحديث التعليمات البرمجية لاستخدام signInWithCredential (على سبيل المثال في فرع كود) واستخدام تدفق المصادقة رمزي مع الرموز ID وهمية لحسابات بدلا من أوراق اعتماد الحقيقية.

  1. إعادة الأسلاك أو التعليق على جزء من الكود الخاص بك الذي يسترد idTokens من IDP ؛ هذا يزيل الحاجة إلى إدخال أسماء مستخدمين وكلمات مرور حقيقية أثناء اختباراتك ، ويخفف اختباراتك من حصص API وحدود المعدل في IDP.
  2. ثانيا، استخدام سلسلة JSON حرفية بدلا من الرمز المميز ل signInWithCredential . باستخدام web SDK كمثال ، يمكنك تغيير الرمز إلى:
firebase.auth().signInWithCredential(firebase.auth.GoogleAuthProvider.credential(
  '{"sub": "abc123", "email": "foo@example.com", "email_verified": true}'
));

عندما تستخدم مع المحاكي، وهذا الرمز بنجاح مصادقة مستخدم مع البريد الإلكتروني foo@example.com في جوجل. فكر في الحقل الفرعي كمفتاح أساسي ، يمكن تغييره إلى أي سلسلة ، مما يسخر من تسجيل الدخول إلى مستخدمين مختلفين. يمكنك استبدال 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 و Apple بواسطة محاكي المصادقة. لا يتم دعم بيانات الاعتماد من موفري غير OpenID Connect.

تسجيل الدخول عبر البريد الإلكتروني / الرسائل القصيرة

في تطبيقات الإنتاج ، تتضمن تدفقات تسجيل الدخول إلى البريد الإلكتروني والرسائل النصية القصيرة عملية غير متزامنة يتحقق فيها المستخدم من رسالة مستلمة ويُدخل رمز تسجيل الدخول في واجهة تسجيل الدخول. محاكي مصادقة لا يرسل أي رسائل البريد الإلكتروني أو رسائل SMS، ولكن كما هو موضح أعلاه ، فإنه توليد الدخول رموز والناتج منها إلى محطة لاستخدامها في اختبار.

لا يدعم المحاكي القدرة على تحديد أرقام هواتف اختبارية برموز تسجيل دخول ثابتة كما يمكن القيام به باستخدام وحدة تحكم Firebase.

معدل الحد / مكافحة سوء الاستخدام

لا يقوم محاكي المصادقة بتكرار الحد من معدل الإنتاج أو ميزات مكافحة إساءة الاستخدام.

ماذا بعد؟