قبل استخدام تطبيق محاكي المصادقة معك ، تأكد من فهمك لسير عمل Firebase Local Emulator Suite بشكل عام ، وأنك تقوم بتثبيت وتكوين Local Emulator Suite ومراجعة أوامر CLI الخاصة بها.
يفترض هذا الموضوع أنك على دراية بتطوير حلول مصادقة Firebase للإنتاج. إذا لزم الأمر ، قم بمراجعة الوثائق الخاصة بمجموعة النظام الأساسي وتقنية المصادقة .
ماذا يمكنني أن أفعل بمحاكي المصادقة؟
يوفر محاكي المصادقة محاكاة محلية عالية الدقة لخدمات مصادقة Firebase ، مما يوفر الكثير من الوظائف الموجودة في مصادقة Firebase . عند إقرانه مع أنظمة Apple الأساسية و Android و Web Firebase SDK ، يتيح لك المحاكي:
- إنشاء وتحديث وإدارة حسابات المستخدمين التي تمت مضاهاتها لاختبار البريد الإلكتروني / كلمة المرور ورقم الهاتف / الرسائل القصيرة والرسائل النصية القصيرة متعددة العوامل ومصادقة مزود هوية الطرف الثالث (مثل Google)
- عرض وتحرير المستخدمين مضاهاة
- نموذج أولي لأنظمة مصادقة الرموز المخصصة
- تحقق من الرسائل المتعلقة بالمصادقة في علامة التبويب Emulator UI Logs.
اختر مشروع Firebase
يحاكي Firebase Local Emulator Suite المنتجات لمشروع Firebase واحد.
لتحديد المشروع المراد استخدامه ، قبل بدء المحاكيات ، في CLI ، firebase use
في دليل العمل الخاص بك. أو يمكنك تمرير علامة --project
إلى كل أمر محاكي.
تدعم Local Emulator Suite محاكاة مشاريع Firebase الحقيقية والمشاريع التجريبية .
نوع المشروع | سمات | استخدم مع المحاكيات |
---|---|---|
حقيقي | مشروع Firebase الحقيقي هو أحد المشروعات التي أنشأتها وضبطتها (على الأرجح عبر وحدة تحكم Firebase). تحتوي المشاريع الحقيقية على موارد مباشرة ، مثل طبعات قواعد البيانات أو حاويات التخزين أو الوظائف أو أي مورد آخر تقوم بإعداده لمشروع Firebase هذا. | عند العمل مع مشاريع Firebase الحقيقية ، يمكنك تشغيل برامج محاكاة لأي من المنتجات المدعومة أو جميعها. بالنسبة إلى أي منتجات لا تقوم بمحاكاتها ، ستتفاعل تطبيقاتك وأكوادك مع المورد المباشر (مثيل قاعدة البيانات ، دلو التخزين ، الوظيفة ، إلخ). |
تجريبي | لا يحتوي مشروع Firebase التجريبي على تهيئة Firebase حقيقية ولا موارد مباشرة. يتم الوصول إلى هذه المشاريع عادةً عبر مختبرات الرموز أو البرامج التعليمية الأخرى. معرفات المشروع للمشاريع التجريبية لها البادئة | عند العمل مع مشاريع Firebase التجريبية ، تتفاعل تطبيقاتك ورموزك مع برامج المحاكاة فقط . إذا حاول تطبيقك التفاعل مع مورد لا يعمل المحاكي من أجله ، فسيفشل هذا الرمز. |
نوصيك باستخدام المشاريع التجريبية حيثما أمكن ذلك. الفوائد تشمل:
- إعداد أسهل ، حيث يمكنك تشغيل المحاكيات دون إنشاء مشروع Firebase
- أمان أقوى ، نظرًا لأنه إذا كانت التعليمات البرمجية الخاصة بك تستدعي عن طريق الخطأ موارد (إنتاج) غير محاكية ، فلا توجد فرصة لتغيير البيانات والاستخدام والفوترة
- دعم أفضل في وضع عدم الاتصال ، حيث لا توجد حاجة للوصول إلى الإنترنت لتنزيل تكوين SDK الخاص بك.
صك تطبيقك للتحدث إلى المحاكي
Android و iOS و Web 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. عند تكوين محاكي المصادقة وتشغيل المحاكيات الأخرى ، فإنها تعمل معًا تلقائيًا.
SDKs للمشرف
تتصل مجموعات Firebase Admin SDK تلقائيًا بمحاكي المصادقة عند تعيين متغير البيئة FIREBASE_AUTH_EMULATOR_HOST
.
export FIREBASE_AUTH_EMULATOR_HOST="127.0.0.1:9099"
لاحظ أن محاكي Cloud Functions يدرك تلقائيًا محاكي المصادقة حتى تتمكن من تخطي هذه الخطوة عند اختبار التكامل بين وظائف السحابة ومحاكيات المصادقة. سيتم تعيين متغير البيئة تلقائيًا لـ Admin SDK في وظائف السحابة.
مع مجموعة متغيرات البيئة ، ستقبل حزم 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 ، الويب ).
لمصادقة البريد الإلكتروني / كلمة المرور ، يمكنك البدء في إنشاء النماذج الأولية عن طريق إضافة حسابات مستخدمين إلى محاكي المصادقة من تطبيقك باستخدام أساليب مصادقة SDK ، أو باستخدام واجهة مستخدم Emulator Suite.
- في واجهة مستخدم Emulator Suite ، انقر فوق علامة التبويب المصادقة .
- انقر فوق الزر "إضافة مستخدم" .
- اتبع معالج إنشاء حساب المستخدم ، وملء حقول مصادقة البريد الإلكتروني.
من خلال إنشاء مستخدم تجريبي ، يمكن لتطبيقك تسجيل دخول المستخدم والخروج منه باستخدام منطق 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 مشابه ، بما في ذلك معلمة كلمة المرور الجديدة (والتي يمكنك تغييرها حسب الحاجة) ، إلى الجهاز.
http://localhost:9099/emulator/action?mode=resetPassword&oobCode=XYZ!23&apiKey=fake-api-key&newPassword=YOUR_NEW_PASSWORD
اختبار غير تفاعلي
بدلاً من استخدام واجهة مستخدم Emulator Suite أو رمز العميل لإدارة حسابات مستخدم البريد الإلكتروني / كلمة المرور ، يمكنك كتابة نصوص إعداد اختبار تستدعي REST APIs لإنشاء حسابات مستخدمين وحذفها وجلب رموز التحقق من البريد الإلكتروني خارج النطاق لملء التحقق من البريد الإلكتروني للمحاكي URL. هذا يبقي النظام الأساسي وكود الاختبار منفصلين ويتيح لك الاختبار غير التفاعلي.
بالنسبة إلى تدفقات اختبار البريد الإلكتروني وكلمة المرور غير التفاعلية ، يكون التسلسل النموذجي على النحو التالي.
- أنشئ مستخدمين بنقطة نهاية REST لتسجيل المصادقة.
- سجّل دخول المستخدمين باستخدام رسائل البريد الإلكتروني وكلمات المرور لإجراء الاختبارات.
- إذا كان ذلك ممكنًا على اختباراتك ، فاحصل على رموز التحقق من البريد الإلكتروني المتاحة خارج النطاق من REST endpont الخاص بالمحاكي .
- مسح سجلات المستخدم بنقطة نهاية REST الخاصة بالمحاكي لمسح البيانات.
تمت محاكاة مصادقة الهاتف / الرسائل القصيرة
لمصادقة الهاتف ، لا يدعم محاكي المصادقة:
- تدفقات reCAPTCHA و APN. بمجرد تكوينها للتفاعل مع المحاكي ، تقوم أدوات SDK للعميل بتعطيل طرق التحقق هذه بطريقة مشابهة لتلك الموضحة لاختبار التكامل ( iOS ، Android ، الويب ).
- اختبر أرقام الهواتف باستخدام الرموز المكونة مسبقًا في وحدة تحكم Firebase.
بخلاف ذلك ، فيما يتعلق برمز العميل ، فإن تدفق مصادقة الهاتف / الرسائل القصيرة مطابق لتلك الموصوفة للإنتاج ( iOS ، Android ، الويب ).
استخدام واجهة مستخدم Emulator Suite:
- في واجهة مستخدم Emulator Suite ، انقر فوق علامة التبويب المصادقة .
- انقر فوق الزر "إضافة مستخدم" .
- اتبع معالج إنشاء حساب المستخدم ، وملء حقول مصادقة الهاتف.
ومع ذلك ، بالنسبة لتدفقات مصادقة الهاتف ، لن يقوم المحاكي بتشغيل تسليم أي رسائل نصية ، نظرًا لأن الاتصال بشركة الاتصالات خارج النطاق وغير مناسب للاختبار المحلي! بدلاً من ذلك ، يقوم المحاكي بطباعة الكود الذي كان سيتم إرساله عبر الرسائل القصيرة إلى نفس الجهاز الذي قمت بتشغيل firebase emulators:start
؛ أدخل هذا الرمز في التطبيق لمحاكاة فحص المستخدمين لرسائلهم النصية.
اختبار غير تفاعلي
لاختبار مصادقة الهاتف غير التفاعلي ، استخدم واجهة برمجة تطبيقات REST لمحاكي المصادقة لاسترداد رموز SMS المتاحة. لاحظ أن الكود يختلف في كل مرة تبدأ فيها التدفق.
التسلسل النموذجي هو على النحو التالي.
- منصة الاتصال
signInWithPhoneNumber
لبدء عملية التحقق. - استرجع رمز التحقق باستخدام نقطة نهاية REST الخاصة بالمحاكي .
- تأكيد المكالمة
confirmationResult.confirm(code)
كالمعتاد مع رمز التحقق.
رسائل SMS متعددة العوامل
يدعم محاكي المصادقة النماذج الأولية واختبار تدفقات المصادقة متعددة العوامل SMS (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 والموفرين الآخرين الذين يستخدمون رموز ID المميزة المطبقة على شكل JSON Web Tokens (JWTs). رموز الوصول (على سبيل المثال تلك التي يوفرها Facebook أو Twitter ، والتي ليست JWTs) غير مدعومة. يناقش القسم التالي بديلًا في هذه الحالات.
اختبار غير تفاعلي
تتمثل إحدى طرق الاختبار غير التفاعلي في أتمتة نقرات المستخدم على صفحة تسجيل الدخول التي يقدمها المحاكي. بالنسبة لتطبيقات الويب ، استخدم واجهة تحكم مثل WebDriver. للجوال ، استخدم أدوات اختبار واجهة المستخدم من النظام الأساسي الخاص بك ، مثل Espresso أو Xcode.
بدلاً من ذلك ، يمكنك تحديث الكود الخاص بك لاستخدام signInWithCredential
(على سبيل المثال في فرع الكود) واستخدام تدفق مصادقة رمزية مع رموز معرف وهمية للحسابات بدلاً من بيانات الاعتماد الحقيقية.
- إعادة الأسلاك أو التعليق على جزء من الكود الخاص بك الذي يسترد idTokens من IDP ؛ هذا يزيل الحاجة إلى إدخال أسماء مستخدمين وكلمات مرور حقيقية أثناء اختباراتك ، ويخفف اختباراتك من حصص API وحدود المعدل في IDP.
- ثانيًا ، استخدم سلسلة 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 غير مدعومة.
تسجيل الدخول عبر البريد الإلكتروني / الرسائل القصيرة
في تطبيقات الإنتاج ، تتضمن تدفقات تسجيل الدخول عبر البريد الإلكتروني والرسائل النصية القصيرة عملية غير متزامنة يتحقق فيها المستخدم من رسالة مستلمة ويُدخل رمز تسجيل الدخول في واجهة تسجيل الدخول. لا يرسل محاكي المصادقة أي رسائل بريد إلكتروني أو رسائل SMS ، ولكن كما هو موضح أعلاه ، يقوم بإنشاء رموز تسجيل الدخول وإخراجها إلى الجهاز لاستخدامها في الاختبار.
لا يدعم المحاكي القدرة على تحديد أرقام هواتف اختبارية برموز تسجيل دخول ثابتة كما يمكن القيام به باستخدام وحدة تحكم Firebase.
مصادقة الرمز المخصص
لا يتحقق محاكي المصادقة من صحة التوقيع أو انتهاء صلاحية الرموز المميزة المخصصة. يتيح لك ذلك استخدام الرموز المميزة المصنوعة يدويًا وإعادة استخدام الرموز المميزة إلى أجل غير مسمى في سيناريوهات النماذج الأولية والاختبار.
معدل الحد / مكافحة سوء الاستخدام
لا يقوم محاكي المصادقة بتكرار الحد من معدل الإنتاج أو ميزات مكافحة إساءة الاستخدام.
وظائف المنع
في الإنتاج ، تتم كتابة المستخدمين في وحدة التخزين مرة واحدة بعد تشغيل كل من الحدثين beforeCreate
و beforeSignIn
. ومع ذلك ، نظرًا للقيود التقنية ، يكتب محاكي المصادقة للتخزين مرتين ، مرة بعد إنشاء المستخدم ومرة أخرى بعد تسجيل الدخول. هذا يعني أنه بالنسبة للمستخدمين الجدد ، يمكنك الاتصال بنجاح بـ getAuth().getUser()
في beforeSignIn
في محاكي المصادقة ، ولكنك ستواجه خطأ أثناء القيام بذلك في الإنتاج.
ماذا بعد؟
للحصول على مجموعة منسقة من مقاطع الفيديو وأمثلة تفصيلية عن كيفية التنفيذ ، اتبع قائمة تشغيل تدريب Firebase Emulators .
نظرًا لأن الوظائف التي تم تشغيلها هي تكامل نموذجي مع المصادقة ، تعرف على المزيد حول وظائف Cloud لمحاكي Firebase في وظائف التشغيل محليًا .