قم بتوصيل تطبيقك بمحاكي المصادقة

قبل استخدام محاكي المصادقة مع تطبيقك، تأكد من فهمك لسير عمل Firebase Local Emulator Suite الشامل ، ومن تثبيت Local Emulator Suite وتكوينه ومراجعة أوامر CLI الخاصة به.

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

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

يوفر محاكي المصادقة محاكاة محلية عالية الدقة لخدمات مصادقة Firebase، مما يوفر الكثير من الوظائف الموجودة في مصادقة Firebase الإنتاجية . يتيح لك المحاكي، مقترنًا بأنظمة Apple الأساسية وAndroid وWeb Firebase SDK، ما يلي:

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

اختر مشروع Firebase

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

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

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

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

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

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

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

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

تجريبي

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

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

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

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

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

قم بتجهيز تطبيقك للتحدث إلى المحاكي

Android وiOS وحزم SDK للويب

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

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 تلقائيًا بمحاكي المصادقة عند تعيين متغير البيئة FIREBASE_AUTH_EMULATOR_HOST .

export FIREBASE_AUTH_EMULATOR_HOST="127.0.0.1:9099"

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

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

إذا كنت تريد أن يتصل كود Admin SDK الخاص بك بمحاكي مشترك يعمل في بيئة أخرى، فستحتاج إلى تحديد نفس معرف المشروع الذي قمت بتعيينه باستخدام 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 UI وبشكل غير تفاعلي من خلال واجهة REST المحلية الخاصة به. تغطي الأقسام التالية حالات الاستخدام التفاعلية وغير التفاعلية.

لبدء محاكي المصادقة وواجهة REST الخاصة به وواجهة مستخدم Emulator Suite، قم بتنفيذ ما يلي:

firebase emulators:start

بالنسبة للمصادقة المجهولة ، يمكن لتطبيقك ممارسة منطق تسجيل الدخول لنظامك الأساسي ( iOS ، و Android ، والويب ).

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

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

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

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

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

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

  • تدفقات reCAPTCHA وAPN. بمجرد تكوينها للتفاعل مع المحاكي، تقوم حزم SDK الخاصة بالعميل بتعطيل طرق التحقق هذه بطريقة مشابهة لتلك الموضحة لاختبار التكامل ( iOS و Android و web ).
  • اختبر أرقام الهواتف باستخدام الرموز التي تم تكوينها مسبقًا في وحدة تحكم Firebase.

بخلاف ذلك، فيما يتعلق برمز العميل، يكون تدفق مصادقة الهاتف/الرسائل النصية القصيرة مطابقًا لما هو موضح للإنتاج ( iOS و Android و web ).

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

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

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

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

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

التسلسل النموذجي هو كما يلي.

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

رسائل نصية متعددة العوامل

يدعم محاكي المصادقة النماذج الأولية واختبار تدفقات المصادقة متعددة العوامل عبر الرسائل القصيرة (MFA) المتوفرة في الإنتاج لنظام التشغيل iOS و Android والويب .

عند إضافة مستخدم وهمي إلى المحاكي، يمكنك تمكين MFA وتكوين رقم هاتف واحد أو أكثر سيتم إرسال رسائل SMS الخاصة بالعامل الثاني إليه. يتم إخراج الرسائل إلى نفس المحطة التي قمت بتشغيل firebase emulators:start ، وهي متاحة من واجهة REST.

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

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

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

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

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

اختبار تدفقات IDP المستندة إلى Firebase SDK

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

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

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

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

لاحظ أن المحاكي يدعم فقط مصادقة signInWithCredential لبيانات الاعتماد المستردة من Google Sign-In وApple والموفرين الآخرين الذين يستخدمون رموز المعرف التي يتم تنفيذها كرموز ويب JSON (JWTs). رموز الوصول (مثل تلك التي يوفرها Facebook أو Twitter، والتي ليست JWTs) غير مدعومة. ويناقش القسم التالي البديل في هذه الحالات.

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

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

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

  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 على 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 وApple بواسطة محاكي المصادقة. لا يتم دعم بيانات الاعتماد المقدمة من موفري خدمات غير OpenID Connect.

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

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

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

مصادقة الرمز المميز

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

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

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

وظائف الحظر

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

ماذا بعد؟

  • للحصول على مجموعة منسقة من مقاطع الفيديو وأمثلة تفصيلية عن كيفية الاستخدام، اتبع قائمة تشغيل تدريب Firebase Emulators .

  • نظرًا لأن الوظائف التي تم تشغيلها تمثل تكاملًا نموذجيًا مع المصادقة، فتعرف على المزيد حول Cloud Functions لمحاكي Firebase في Run jobs locally .