قبل از استفاده از شبیهساز Authentication با برنامه خود، مطمئن شوید که گردش کار کلی Firebase Local Emulator Suite را درک کردهاید ، و Local Emulator Suite را نصب و پیکربندی کردهاید و دستورات CLI آن را بررسی کردهاید.
این مبحث فرض میکند که شما از قبل با توسعه راهکارهای Firebase Authentication برای محیط عملیاتی آشنا هستید. در صورت نیاز، مستندات مربوط به ترکیب پلتفرم و تکنیک احراز هویت خود را بررسی کنید.
با شبیهساز Authentication چه کاری میتوانم انجام دهم؟
شبیهساز Authentication شبیهسازی محلی با کیفیت بالا از سرویسهای Firebase Authentication را ارائه میدهد و بسیاری از قابلیتهای موجود در Firebase Authentication در محیط عملیاتی را فراهم میکند. این شبیهساز که با پلتفرمهای اپل، اندروید و وب Firebase SDK جفت شده است، به شما امکان میدهد:
- ایجاد، بهروزرسانی و مدیریت حسابهای کاربری شبیهسازیشده برای آزمایش ایمیل/رمز عبور، شماره تلفن/پیامک، احراز هویت چندعاملی پیامکی و احراز هویت ارائهدهنده هویت شخص ثالث (مثلاً گوگل)
- مشاهده و ویرایش کاربران شبیهسازیشده
- نمونه اولیه سیستمهای احراز هویت توکن سفارشی
- پیامهای مربوط به احراز هویت را در برگه گزارشهای رابط کاربری شبیهساز بررسی کنید.
یک پروژه فایربیس انتخاب کنید
Firebase Local Emulator Suite محصولات مربوط به یک پروژه فایربیس را شبیهسازی میکند.
برای انتخاب پروژه مورد استفاده، قبل از شروع شبیهسازها، در CLI firebase use در دایرکتوری کاری خود اجرا کنید. یا میتوانید پرچم --project را به هر دستور شبیهساز ارسال کنید.
Local Emulator Suite از شبیهسازی پروژههای واقعی Firebase و پروژههای آزمایشی پشتیبانی میکند.
| نوع پروژه | ویژگیها | استفاده با شبیهسازها |
|---|---|---|
| واقعی | یک پروژه واقعی Firebase، پروژهای است که شما ایجاد و پیکربندی کردهاید (به احتمال زیاد از طریق کنسول Firebase ). پروژههای واقعی منابع زندهای دارند، مانند نمونههای پایگاه داده، مخازن ذخیرهسازی، توابع یا هر منبع دیگری که برای آن پروژه Firebase تنظیم کردهاید. | هنگام کار با پروژههای واقعی Firebase، میتوانید شبیهسازها را برای هر یا همه محصولات پشتیبانیشده اجرا کنید. برای هر محصولی که شبیهسازی نمیکنید، برنامهها و کد شما با منبع زنده (نمونه پایگاه داده، مخزن ذخیرهسازی، تابع و غیره) تعامل خواهند داشت. |
| نسخه آزمایشی | یک پروژه آزمایشی فایربیس هیچ پیکربندی واقعی فایربیس و هیچ منبع زندهای ندارد. این پروژهها معمولاً از طریق codelabs یا سایر آموزشها قابل دسترسی هستند. شناسههای پروژه برای پروژههای نمایشی دارای پیشوند | هنگام کار با پروژههای آزمایشی Firebase، برنامهها و کد شما فقط با شبیهسازها تعامل دارند. اگر برنامه شما سعی کند با منبعی که شبیهساز برای آن اجرا نمیشود، تعامل داشته باشد، آن کد با شکست مواجه خواهد شد. |
توصیه میکنیم تا حد امکان از پروژههای نمایشی استفاده کنید. مزایا عبارتند از:
- راهاندازی آسانتر، زیرا میتوانید شبیهسازها را بدون ایجاد یک پروژه Firebase اجرا کنید
- ایمنی قویتر، زیرا اگر کد شما بهطور تصادفی منابع شبیهسازی نشده (تولیدی) را فراخوانی کند، هیچ شانسی برای تغییر دادهها، استفاده و صدور صورتحساب وجود ندارد.
- پشتیبانی آفلاین بهتر، زیرا نیازی به دسترسی به اینترنت برای دانلود پیکربندی SDK شما نیست.
برنامه خود را برای ارتباط با شبیهساز آماده کنید
SDK های اندروید، iOS و وب
پیکربندی درونبرنامهای یا کلاسهای آزمایشی خود را برای تعامل با شبیهساز Authentication به شرح زیر تنظیم کنید.
Kotlin
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
import { getAuth, connectAuthEmulator } from "firebase/auth"; const auth = getAuth(); connectAuthEmulator(auth, "http://127.0.0.1:9099");
Web
const auth = firebase.auth(); auth.useEmulator("http://127.0.0.1:9099");
برای نمونهسازی اولیه و آزمایش تعاملات بین Cloud Functions Authentication و ابر یا Firebase Security Rules برای Cloud Firestore یا Realtime Database نیازی به تنظیمات اضافی نیست. وقتی شبیهساز Authentication پیکربندی شده و سایر شبیهسازها در حال اجرا هستند، آنها به طور خودکار با هم کار میکنند.
Admin SDK
Firebase Admin SDK به طور خودکار با تنظیم متغیر محیطی FIREBASE_AUTH_EMULATOR_HOST به شبیهساز Authentication متصل میشود.
export FIREBASE_AUTH_EMULATOR_HOST="127.0.0.1:9099"
توجه داشته باشید که شبیهساز Cloud Functions به طور خودکار از شبیهساز Authentication آگاه است، بنابراین میتوانید هنگام آزمایش ادغام بین Cloud Functions و شبیهسازهای Authentication از این مرحله صرف نظر کنید. متغیر محیطی به طور خودکار برای Admin SDK در Cloud Functions تنظیم میشود.
با تنظیم متغیر محیطی، Firebase Admin SDK ها، توکنهای شناسه بدون امضا و کوکیهای جلسه صادر شده توسط شبیهساز Authentication (به ترتیب از طریق متدهای verifyIdToken و createSessionCookie ) را برای تسهیل توسعه و آزمایش محلی میپذیرند. لطفاً مطمئن شوید که متغیر محیطی را در محیط عملیاتی تنظیم نمیکنید .
اگر میخواهید کد Admin SDK شما به یک شبیهساز مشترک که در محیط دیگری اجرا میشود متصل شود، باید همان شناسه پروژهای را که با استفاده از Firebase CLI تنظیم کردهاید، مشخص کنید. میتوانید شناسه پروژه را مستقیماً به initializeApp ارسال کنید یا متغیر محیطی GCLOUD_PROJECT را تنظیم کنید.
SDK مدیریت Node.js
admin.initializeApp({ projectId: "your-project-id" });
متغیر محیطی
export GCLOUD_PROJECT="your-project-id"
توکنهای شناسایی
به دلایل امنیتی، شبیهساز Authentication ، توکنهای شناسه بدون امضا صادر میکند که فقط توسط سایر شبیهسازهای Firebase یا Firebase Admin SDK هنگام پیکربندی پذیرفته میشوند. این توکنها توسط سرویسهای Firebase یا Firebase Admin SDK که در حالت تولید اجرا میشوند (مثلاً رفتار پیشفرض بدون مراحل راهاندازی که در بالا توضیح داده شد) رد میشوند.
شبیهساز را شروع کنید
شما میتوانید از شبیهساز Authentication به صورت تعاملی از طریق Emulator Suite UI و به صورت غیر تعاملی از طریق رابط محلی REST آن استفاده کنید. بخشهای زیر موارد استفاده تعاملی و غیر تعاملی را پوشش میدهند.
برای شروع شبیهساز Authentication ، رابط REST آن و Emulator Suite UI ، دستور زیر را اجرا کنید:
firebase emulators:start
ایمیل شبیهسازیشده، لینک ایمیل و احراز هویت ناشناس
برای احراز هویت ناشناس ، برنامه شما میتواند منطق ورود به سیستم را برای پلتفرم شما ( iOS ، اندروید ، وب ) اعمال کند.
برای احراز هویت ایمیل/رمز عبور ، میتوانید با اضافه کردن حسابهای کاربری به شبیهساز Authentication از برنامه خود با استفاده از متدهای Authentication SDK یا با استفاده از Emulator Suite UI نمونهسازی اولیه را شروع کنید.
- در Emulator Suite UI ، روی تب Authentication کلیک کنید.
- روی دکمه افزودن کاربر کلیک کنید.
- مراحل ایجاد حساب کاربری را دنبال کنید و فیلدهای احراز هویت ایمیل را پر کنید.
با ایجاد یک کاربر آزمایشی، برنامه شما میتواند کاربر را با منطق SDK برای پلتفرم شما ( iOS ، اندروید ، وب ) وارد و خارج کند.
برای آزمایش تأیید/ورود به سیستم ایمیل با جریانهای لینک ایمیل، شبیهساز یک 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 UI یا کد کلاینت برای مدیریت حسابهای کاربری ایمیل/رمز عبور، میتوانید اسکریپتهای راهاندازی آزمایشی بنویسید که REST APIها را برای ایجاد و حذف حسابهای کاربری فراخوانی میکنند و کدهای تأیید ایمیل خارج از باند را برای پر کردن URL تأیید ایمیل شبیهساز دریافت میکنند. این کار باعث میشود پلتفرم و کد آزمایشی از هم جدا باشند و به شما امکان میدهد به صورت غیر تعاملی آزمایش کنید.
برای جریانهای تست ایمیل و رمز عبور غیرتعاملی، توالی معمول به شرح زیر است.
- کاربرانی با نقطه پایانی Authentication signUp REST ایجاد کنید.
- برای انجام آزمایشها، کاربران را با استفاده از ایمیل و رمز عبور وارد سیستم کنید.
- در صورت لزوم برای تستهای خود، کدهای تأیید ایمیل خارج از باند موجود را از نقطه پایانی REST مخصوص شبیهساز دریافت کنید.
- رکوردهای کاربر را با استفاده از نقطه پایانی REST مخصوص شبیهساز، برای پاک کردن دادهها، خالی کنید.
احراز هویت شبیهسازیشده از طریق تلفن/پیامک
برای احراز هویت از طریق تلفن، شبیهساز Auth از موارد زیر پشتیبانی نمیکند:
- جریانهای reCAPTCHA و APN. پس از پیکربندی برای تعامل با شبیهساز، SDKهای کلاینت این روشهای تأیید را به روشی مشابه آنچه برای تست یکپارچهسازی ( iOS ، اندروید ، وب ) شرح داده شد، غیرفعال میکنند.
- شماره تلفنها را با کدهای از پیش تنظیمشده در کنسول Firebase آزمایش کنید.
در غیر این صورت، از نظر کد کلاینت، جریان احراز هویت تلفنی/پیامکی مشابه روشی است که برای محیط عملیاتی ( iOS ، اندروید ، وب ) شرح داده شده است.
استفاده از Emulator Suite UI :
- در Emulator Suite UI ، روی تب Authentication کلیک کنید.
- روی دکمه افزودن کاربر کلیک کنید.
- مراحل ایجاد حساب کاربری را دنبال کنید و فیلدهای احراز هویت تلفن را پر کنید.
با این حال، برای جریانهای احراز هویت تلفنی، شبیهساز هیچ پیام متنی را ارسال نمیکند، زیرا تماس با یک اپراتور خارج از محدوده است و برای آزمایش محلی مناسب نیست! در عوض، شبیهساز کدی را که از طریق پیامک به همان ترمینالی که firebase emulators:start در آن اجرا کردهاید ارسال میشود، چاپ میکند؛ این کد را در برنامه وارد کنید تا بررسی پیامهای متنی توسط کاربران شبیهسازی شود.
تست غیر تعاملی
برای آزمایش احراز هویت تلفنی غیرتعاملی، از REST API شبیهساز Authentication برای بازیابی کدهای پیامکی موجود استفاده کنید. توجه داشته باشید که کد هر بار که جریان را شروع میکنید متفاوت است.
توالی معمول به شرح زیر است.
- برای شروع فرآیند تأیید، با
signInWithPhoneNumberپلتفرم تماس بگیرید. - کد تأیید را با استفاده از نقطه پایانی REST مخصوص شبیهساز بازیابی کنید.
- تابع
confirmationResult.confirm(code)طبق معمول با کد تأیید فراخوانی کنید.
پیامک چند عاملی
شبیهساز Authentication از نمونهسازی اولیه و آزمایش جریانهای احراز هویت چند عاملی پیامکی (MFA) که در محیط تولید برای iOS ، اندروید و وب موجود است، پشتیبانی میکند.
وقتی یک کاربر آزمایشی به شبیهساز اضافه میکنید، میتوانید MFA را فعال کنید و یک یا چند شماره تلفن را که پیامکهای فاکتور دوم به آنها ارسال میشوند، پیکربندی کنید. پیامها به همان ترمینالی که firebase emulators:start در آن اجرا کردهاید، ارسال میشوند و از رابط REST نیز در دسترس هستند.
احراز هویت ارائه دهنده هویت شخص ثالث (IDP) شبیهسازی شده
شبیهساز Authentication به شما امکان میدهد بسیاری از جریانهای احراز هویت شخص ثالث را در برنامههای iOS، اندروید یا وب خود بدون هیچ تغییری در کد تولید، آزمایش کنید. برای نمونههایی از جریانهای احراز هویت، به مستندات مربوط به ترکیبات مختلف ارائهدهندگان و پلتفرمهایی که میتوانید در برنامه خود استفاده کنید، مراجعه کنید.
به طور کلی، میتوانید از Firebase SDK برای احراز هویت به یکی از دو روش زیر استفاده کنید:
- برنامه شما به SDK اجازه میدهد تا کل فرآیند را از ابتدا تا انتها، از جمله تمام تعاملات با ارائه دهندگان IDP شخص ثالث برای بازیابی اعتبارنامهها، مدیریت کند.
- برنامه شما به صورت دستی اعتبارنامهها را از یک ارائهدهنده شخص ثالث با استفاده از SDK آن شخص بازیابی میکند و آن اعتبارنامهها را به SDK Authentication منتقل میکند.
دوباره، لینک مستندات بالا را بررسی کنید و مطمئن شوید که با هر جریانی که میخواهید استفاده کنید - مدیریتشده توسط Firebase SDK در مقابل بازیابی دستی اعتبارنامه - آشنا هستید. شبیهساز Authentication از آزمایش هر دو رویکرد پشتیبانی میکند.
آزمایش جریانهای IDP مبتنی بر Firebase SDK
اگر برنامه شما از هرگونه جریان سرتاسری Firebase SDK، مانند OAuthProvider برای ورود به سیستم با مایکروسافت، گیتهاب یا یاهو، برای آزمایش تعاملی استفاده میکند، شبیهساز Authentication یک نسخه محلی از صفحه ورود مربوطه را ارائه میدهد تا به شما در آزمایش احراز هویت از برنامههای وب که متد signinWithPopup یا signInWithRedirect را فراخوانی میکنند، کمک کند. این صفحه ورود به سیستم محلی همچنین در برنامههای تلفن همراه ظاهر میشود که توسط کتابخانه webview پلتفرم شما رندر میشود.
این شبیهساز در صورت نیاز، حسابهای کاربری و اعتبارنامههای شخص ثالث ساختگی را در حین انجام جریانها ایجاد میکند.
آزمایش جریانهای IDP با بازیابی دستی اعتبارنامه
اگر از تکنیکهای ورود به سیستم «دستی» استفاده کنید و متد signInWithCredentials پلتفرم خود را فراخوانی کنید، طبق معمول، برنامه شما درخواست ورود به سیستم شخص ثالث واقعی را میدهد و اعتبارنامههای شخص ثالث واقعی را بازیابی میکند.
توجه داشته باشید که این شبیهساز فقط از احراز هویت signInWithCredential برای اعتبارنامههای بازیابیشده از Google Sign-In، Apple و سایر ارائهدهندگانی که از توکنهای شناسه پیادهسازیشده به عنوان توکنهای وب JSON (JWT) استفاده میکنند، پشتیبانی میکند. توکنهای دسترسی (مثلاً آنهایی که توسط فیسبوک یا توییتر ارائه میشوند و JWT نیستند) پشتیبانی نمیشوند. بخش بعدی در این موارد به بررسی یک جایگزین میپردازد.
تست غیر تعاملی
یک رویکرد برای تست غیرتعاملی، خودکارسازی کلیکهای کاربر روی صفحه ورود به سیستم ارائه شده توسط شبیهساز است. برای برنامههای وب، از یک رابط کنترلی مانند WebDriver استفاده کنید. برای موبایل، از ابزار تست رابط کاربری پلتفرم خود، مانند Espresso یا Xcode، استفاده کنید.
به عنوان یک روش جایگزین، میتوانید کد خود را بهروزرسانی کنید تا از signInWithCredential استفاده کند (مثلاً در یک شاخه کد) و به جای اعتبارنامههای واقعی، از یک جریان احراز هویت توکن با توکنهای شناسه ساختگی برای حسابها استفاده کنید.
- بخشی از کد خود را که idTokenها را از IDP بازیابی میکند، بازنویسی یا کامنتگذاری کنید؛ این کار نیاز به وارد کردن نام کاربری و رمز عبور واقعی را در طول تستهای شما از بین میبرد و تستهای شما را از سهمیههای API و محدودیتهای سرعت در IDP رهایی میبخشد.
- دوم، به جای توکن برای
signInWithCredentialاز یک رشته JSON تحتاللفظی استفاده کنید. با استفاده از 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') یا هر شناسه ارائهدهنده دیگری که میخواهید شبیهسازی کنید، جایگزین کنید.
احراز هویت با توکن سفارشی شبیهسازی شده
شبیهساز Authentication احراز هویت را با استفاده از JSON Web Tokenهای سفارشی و با استفاده از فراخوانی متد signInWithCustomToken در پلتفرمهای پشتیبانیشده، همانطور که در مستندات Authentication نسخه نهایی توضیح داده شده است، مدیریت میکند.
تفاوت شبیهساز Authentication با محیط عملیاتی
شبیهساز Authentication Firebase بسیاری از ویژگیهای محصول نهایی را شبیهسازی میکند. با این حال، از آنجایی که هر نوع سیستم احراز هویت به شدت به امنیت در سطوح مختلف (دستگاه، ارائه دهندگان شخص ثالث، Firebase و غیره) وابسته است، برای شبیهساز دشوار است که همه جریانها را به درستی بازسازی کند.
مدیریت دسترسی ابری (IAM)
مجموعه شبیهساز Firebase تلاشی برای تکرار یا رعایت هیچ رفتار مرتبط با IAM برای اجرا نمیکند. شبیهسازها به قوانین امنیتی Firebase ارائه شده پایبند هستند، اما در موقعیتهایی که معمولاً از IAM استفاده میشود، به عنوان مثال برای تنظیم توابع ابری که حساب سرویس و در نتیجه مجوزها را فراخوانی میکنند، شبیهساز قابل تنظیم نیست و از حساب کاربری سراسری موجود در دستگاه توسعهدهنده شما استفاده میکند، مشابه اجرای مستقیم یک اسکریپت محلی.
ورود از طریق لینک ایمیل در موبایل
از آنجایی که در پلتفرمهای موبایل، ورود از طریق لینک ایمیل به Firebase Dynamic Links متکی است، تمام این لینکها در پلتفرم وب (موبایل) باز خواهند شد.
ورود به سیستم شخص ثالث
برای جریانهای ورود به سیستم شخص ثالث، Authentication فایربیس به اعتبارنامههای امن ارائهدهندگان شخص ثالث مانند توییتر و گیتهاب متکی است.
اعتبارنامههای واقعی از ارائهدهندگان OpenID Connect مانند گوگل و اپل توسط شبیهساز Authentication پذیرفته میشوند. اعتبارنامههای ارائهدهندگان غیر OpenID Connect پشتیبانی نمیشوند.
ورود از طریق ایمیل/پیامک
در برنامههای کاربردی، جریانهای ورود به سیستم از طریق ایمیل و پیامک شامل یک عملیات غیرهمزمان هستند که در آن کاربر پیام دریافتی را بررسی کرده و کد ورود را در رابط ورود وارد میکند. شبیهساز Authentication هیچ ایمیل یا پیامکی ارسال نمیکند، اما همانطور که در بالا توضیح داده شد، کدهای ورود را تولید کرده و آنها را برای استفاده در آزمایش به ترمینال ارسال میکند.
این شبیهساز از قابلیت تعریف شماره تلفنهای آزمایشی با کدهای ورود ثابت، آنطور که میتوان با استفاده از کنسول Firebase انجام داد، پشتیبانی نمیکند.
احراز هویت با توکن سفارشی
شبیهساز Authentication ، امضا یا انقضای توکنهای سفارشی را اعتبارسنجی نمیکند. این به شما امکان میدهد از توکنهای دستساز استفاده کنید و توکنها را به طور نامحدود در سناریوهای نمونهسازی و آزمایش استفاده مجدد کنید.
محدودکننده نرخ / ضد سوءاستفاده
شبیهساز Authentication ویژگیهای محدودکننده نرخ تولید یا ضد سوءاستفاده را تکرار نمیکند.
توابع مسدود کننده
در محیط عملیاتی، کاربران یک بار پس از فعال شدن هر دو رویداد beforeCreate و beforeSignIn در حافظه نوشته میشوند. با این حال، به دلیل محدودیتهای فنی، شبیهساز Authentication دو بار در حافظه مینویسد، یک بار پس از ایجاد کاربر و بار دیگر پس از ورود به سیستم. این بدان معناست که برای کاربران جدید، میتوانید با موفقیت getAuth().getUser() در beforeSignIn در شبیهساز Authentication فراخوانی کنید، اما در محیط عملیاتی با خطا مواجه خواهید شد.
بعدش چی؟
برای مجموعهای منتخب از ویدیوها و مثالهای آموزشی دقیق، لیست پخش آموزش شبیهسازهای Firebase را دنبال کنید.
از آنجایی که توابع فعالشده معمولاً با Authentication ادغام میشوند، برای کسب اطلاعات بیشتر در مورد توابع ابری برای شبیهساز Firebase به Run functions locally مراجعه کنید.