برنامه خود را به شبیه ساز احراز هویت وصل کنید

قبل از استفاده از شبیه‌ساز Authentication با برنامه خود، مطمئن شوید که گردش کار مجموعه محلی Firebase Local Emulator Suite را درک کرده‌اید ، و Local Emulator Suite را نصب و پیکربندی کرده و دستورات CLI آن را مرور می‌کنید.

این موضوع فرض می‌کند که شما قبلاً با توسعه راه‌حل‌های Firebase Authentication برای تولید آشنا هستید. در صورت نیاز، مستندات ترکیبی از پلتفرم و تکنیک احراز هویت را بررسی کنید.

شبیه‌ساز Authentication شبیه‌سازی محلی با وفاداری بالا از سرویس‌های Firebase Authentication را ارائه می‌کند و بسیاری از عملکردهای موجود در Firebase Authentication تولیدی را ارائه می‌دهد. این شبیه ساز همراه با پلتفرم های اپل، اندروید و 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 واقعی و هیچ منبع زنده ای ندارد. این پروژه ها معمولاً از طریق نرم افزارهای کد یا آموزش های دیگر قابل دسترسی هستند.

شناسه های پروژه برای پروژه های نمایشی دارای پیشوند demo- هستند.

هنگام کار با پروژه های Firebase آزمایشی، برنامه ها و کد شما فقط با شبیه سازها تعامل دارند. اگر برنامه شما سعی کند با منبعی که شبیه ساز برای آن اجرا نمی شود تعامل داشته باشد، آن کد با شکست مواجه می شود.

توصیه می کنیم تا جایی که امکان دارد از پروژه های نمایشی استفاده کنید. مزایا عبارتند از:

  • راه اندازی آسان تر، زیرا می توانید شبیه سازها را بدون ایجاد پروژه Firebase اجرا کنید
  • ایمنی قوی تر، زیرا اگر کد شما به طور تصادفی منابع غیر شبیه سازی شده (تولید) را فراخوانی کند، هیچ شانسی برای تغییر داده ها، استفاده و صورتحساب وجود ندارد.
  • پشتیبانی آفلاین بهتر است، زیرا برای دانلود پیکربندی SDK نیازی به دسترسی به اینترنت نیست.

برنامه خود را برای صحبت با شبیه ساز ابزار کنید

Android، iOS، و وب SDK

پیکربندی درون‌برنامه یا کلاس‌های آزمایشی خود را برای تعامل با شبیه‌ساز Authentication به شرح زیر تنظیم کنید.

Firebase.auth.useEmulator("10.0.2.2", 9099)
FirebaseAuth.getInstance().useEmulator("10.0.2.2", 9099);
Auth.auth().useEmulator(withHost:"127.0.0.1", port:9099)
import { getAuth, connectAuthEmulator } from "firebase/auth";

const auth = getAuth();
connectAuthEmulator(auth, "http://127.0.0.1:9099");
const auth = firebase.auth();
auth.useEmulator("http://127.0.0.1:9099");

برای نمونه سازی اولیه و آزمایش تعاملات بین Authentication و Cloud Functions یا Firebase Security Rules برای Cloud Firestore یا Realtime Database نیازی به تنظیمات اضافی نیست. هنگامی که شبیه ساز Authentication پیکربندی می شود و شبیه سازهای دیگر در حال اجرا هستند، به طور خودکار با هم کار می کنند.

Admin SDK s

هنگامی که متغیر محیطی FIREBASE_AUTH_EMULATOR_HOST تنظیم شود، Firebase Admin SDK به طور خودکار به شبیه‌ساز 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 شما به یک شبیه‌ساز مشترک که در محیط دیگری اجرا می‌شود متصل شود، باید همان ID پروژه‌ای را که با استفاده از Firebase CLI تنظیم کرده‌اید، مشخص کنید. می‌توانید یک شناسه پروژه را برای initializeApp به طور مستقیم ارسال کنید یا متغیر محیطی GCLOUD_PROJECT را تنظیم کنید.

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 ، Android ، وب ) اعمال کند.

برای احراز هویت ایمیل/گذرواژه ، می‌توانید با افزودن حساب‌های کاربری به شبیه‌ساز Authentication از برنامه خود با استفاده از روش‌های Authentication SDK یا با استفاده از Emulator Suite UI نمونه‌سازی اولیه را شروع کنید.

  1. در Emulator Suite UI ، روی برگه Authentication کلیک کنید.
  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 UI یا کد مشتری برای مدیریت حساب‌های کاربری ایمیل/گذرواژه، می‌توانید اسکریپت‌های راه‌اندازی آزمایشی بنویسید که REST API را برای ایجاد و حذف حساب‌های کاربری فراخوانی می‌کند و کدهای تأیید ایمیل خارج از باند را واکشی می‌کند تا تأیید ایمیل شبیه‌ساز را تکمیل کند. URL. این پلتفرم و کد تست را جدا نگه می دارد و به شما امکان می دهد به صورت غیر تعاملی تست کنید.

برای جریان های تست ایمیل و رمز عبور غیر تعاملی، ترتیب معمولی به شرح زیر است.

  1. کاربرانی را با نقطه پایانی REST signUp Authentication ایجاد کنید.
  2. کاربران را با استفاده از ایمیل ها و گذرواژه ها برای انجام آزمایشات وارد کنید.
  3. اگر برای آزمایش‌های شما قابل اجرا است، کدهای تأیید ایمیل خارج از باند موجود را از نقطه پایانی REST خاص شبیه‌ساز واکشی کنید.
  4. برای پاک کردن داده‌ها، سوابق کاربر را با نقطه پایانی REST مخصوص شبیه‌ساز بشویید.

احراز هویت تلفن/اس ام اس شبیه سازی شده

برای احراز هویت تلفن، شبیه ساز Auth پشتیبانی نمی کند:

  • جریان های reCAPTCHA و APN. پس از پیکربندی برای تعامل با شبیه ساز، SDK های مشتری این روش های تأیید را به روشی مشابه آنچه برای آزمایش ادغام توضیح داده شده است ( iOS ، Android ، وب ) غیرفعال می کنند.
  • شماره تلفن ها را با کدهای از پیش پیکربندی شده در کنسول Firebase آزمایش کنید.

در غیر این صورت، از نظر کد مشتری، جریان احراز هویت تلفن/پیام با آنچه برای تولید توضیح داده شده است ( iOS ، Android ، وب ) یکسان است.

استفاده از Emulator Suite UI :

  1. در Emulator Suite UI ، روی برگه Authentication کلیک کنید.
  2. روی دکمه افزودن کاربر کلیک کنید.
  3. با پر کردن فیلدهای احراز هویت تلفن، جادوگر ایجاد حساب کاربری را دنبال کنید.

با این حال، برای جریان‌های احراز هویت تلفن، شبیه‌ساز ارسال هیچ پیام متنی را آغاز نمی‌کند، زیرا تماس با شرکت مخابراتی خارج از محدوده است و برای آزمایش محلی دوستانه نیست! در عوض، شبیه‌ساز کدی را که از طریق پیامک به همان پایانه‌ای که در آن firebase emulators:start ; این کد را به برنامه وارد کنید تا کاربران پیام های متنی خود را شبیه سازی کنند.

تست غیر تعاملی

برای آزمایش احراز هویت تلفن غیرتعاملی، از Authentication emulator REST API برای بازیابی کدهای پیامک موجود استفاده کنید. توجه داشته باشید که هر بار که جریان را شروع می کنید، کد متفاوت است.

توالی معمولی به شرح زیر است.

  1. برای شروع فرآیند تأیید، با signInWithPhoneNumber پلت فرم تماس بگیرید.
  2. کد تأیید را با استفاده از نقطه پایانی REST مخصوص شبیه ساز بازیابی کنید.
  3. به طور معمول با کد تأیید با confirmationResult.confirm(code) تماس بگیرید.

پیامک چند عاملی

شبیه‌ساز Authentication از نمونه‌سازی اولیه و آزمایش جریان‌های احراز هویت چندعاملی SMS (MFA) موجود در تولید برای iOS ، Android و وب پشتیبانی می‌کند.

هنگامی که یک کاربر ساختگی را به شبیه ساز اضافه می کنید، می توانید MFA را فعال کرده و یک یا چند شماره تلفن را پیکربندی کنید که پیام های SMS فاکتور دوم به آنها ارسال شود. پیام‌ها به همان پایانه‌ای که firebase emulators:start در آن اجرا کردید، خروجی می‌شوند و از رابط REST در دسترس هستند.

احراز هویت ارائه دهنده هویت شخص ثالث (IDP) شبیه سازی شده

شبیه ساز Authentication به شما امکان می دهد بسیاری از جریان های احراز هویت شخص ثالث را در برنامه های iOS، Android یا وب خود بدون هیچ تغییری در کد تولید آزمایش کنید. برای نمونه‌هایی از جریان‌های احراز هویت، به مستندات مربوط به ترکیب‌های مختلف ارائه‌دهندگان و پلت‌فرم‌هایی که می‌توانید در برنامه خود استفاده کنید، مراجعه کنید.

به طور کلی، می‌توانید از Firebase SDK برای احراز هویت به یکی از دو روش استفاده کنید:

  • برنامه شما به SDK این امکان را می‌دهد تا کل فرآیند را به‌طور سرتاسر انجام دهد، از جمله تمام تعاملات با ارائه‌دهندگان IDP شخص ثالث برای بازیابی اطلاعات کاربری.
  • برنامه شما به‌صورت دستی اعتبارنامه‌ها را از یک ارائه‌دهنده شخص ثالث با استفاده از SDK آن شخص بازیابی می‌کند و این اعتبارنامه‌ها را به SDK Authentication منتقل می‌کند.

مجدداً، پیوند اسناد بالا را بررسی کنید و مطمئن شوید که با هر جریانی آشنا هستید - Firebase SDK-managed در مقابل بازیابی دستی اعتبار - که می خواهید استفاده کنید. شبیه ساز Authentication از تست هر یک از روش ها پشتیبانی می کند.

آزمایش جریان های IDP مبتنی بر SDK Firebase

اگر برنامه شما از هر جریان Firebase SDK سرتاسر، مانند OAuthProvider برای ورود به سیستم با Microsoft، GitHub یا Yahoo، برای آزمایش تعاملی استفاده می‌کند، شبیه‌ساز Authentication نسخه محلی صفحه ورود به سیستم مربوطه را ارائه می‌کند تا به شما در آزمایش کمک کند. احراز هویت از برنامه های وب که روش signinWithPopup یا signInWithRedirect فراخوانی می کنند. این صفحه ورود به سیستم به صورت محلی در برنامه‌های تلفن همراه نیز ظاهر می‌شود که توسط کتابخانه وب‌نمای پلتفرم شما ارائه شده است.

شبیه‌ساز حساب‌های کاربری ساختگی شخص ثالث و اعتبارنامه‌ها را در صورت نیاز با ادامه جریان ایجاد می‌کند.

آزمایش جریان IDP با بازیابی دستی اعتبار

اگر از تکنیک‌های ورود به سیستم «دستی» استفاده می‌کنید و با روش signInWithCredentials پلتفرم خود تماس می‌گیرید، طبق معمول، برنامه شما درخواست ورود واقعی شخص ثالث را می‌دهد و اعتبارنامه شخص ثالث واقعی را بازیابی می‌کند.

توجه داشته باشید که شبیه‌ساز فقط از تأیید اعتبار signInWithCredential برای اعتبارنامه‌های بازیابی شده از Google Sign-In، Apple، و سایر ارائه‌دهندگانی که از نشانه‌های شناسه پیاده‌سازی شده به عنوان JSON Web Tokens (JWT) استفاده می‌کنند، پشتیبانی می‌کند. توکن های دسترسی (به عنوان مثال آنهایی که توسط فیس بوک یا توییتر ارائه می شوند، که JWT نیستند) پشتیبانی نمی شوند. بخش بعدی به یک جایگزین در این موارد می پردازد.

تست غیر تعاملی

یکی از روش‌های آزمایش غیرتعاملی، خودکار کردن کلیک‌های کاربر بر روی صفحه ورود به سیستم است که توسط شبیه‌ساز ارائه می‌شود. برای برنامه های وب، از یک رابط کنترلی مانند WebDriver استفاده کنید. برای تلفن همراه، از ابزار تست UI از پلتفرم خود، مانند Espresso یا Xcode استفاده کنید.

از طرف دیگر، می‌توانید کد خود را برای استفاده از signInWithCredential (مثلاً در یک شاخه کد) به‌روزرسانی کنید و از یک جریان تأیید اعتبار رمزی با نشانه‌های شناسه ساختگی برای حساب‌ها به جای اعتبارنامه‌های واقعی استفاده کنید.

  1. بخشی از کد خود را که idToken ها را از 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') یا هر شناسه ارائه دهنده دیگری که می خواهید مسخره کنید جایگزین کنید.

احراز هویت رمز سفارشی شبیه سازی شده

شبیه ساز Authentication احراز هویت را با توکن های وب JSON سفارشی با استفاده از فراخوانی به روش signInWithCustomToken در پلتفرم های پشتیبانی شده انجام می دهد، همانطور که در مستندات Authentication تولید توضیح داده شده است.

چگونه شبیه ساز Authentication با تولید متفاوت است

شبیه ساز Firebase Authentication بسیاری از ویژگی های محصول تولیدی را شبیه سازی می کند. با این حال، از آنجایی که هر نوع سیستم احراز هویت به شدت به امنیت در سطوح مختلف (دستگاه، ارائه دهندگان شخص ثالث، Firebase و غیره) متکی است، برای شبیه‌ساز دشوار است که همه جریان‌ها را به درستی ایجاد کند.

Cloud IAM

مجموعه Firebase Emulator تلاشی برای تکرار یا احترام به رفتارهای مرتبط با IAM برای اجرا ندارد. شبیه سازها از قوانین امنیتی Firebase ارائه شده پیروی می کنند، اما در شرایطی که IAM به طور معمول استفاده می شود، به عنوان مثال برای تنظیم توابع Cloud با فراخوانی حساب سرویس و در نتیجه مجوزها، شبیه ساز قابل پیکربندی نیست و از حساب جهانی در دسترس در دستگاه توسعه دهنده شما استفاده می کند. مشابه اجرای مستقیم یک اسکریپت محلی.

از آنجایی که در پلتفرم‌های تلفن همراه، ورود به سیستم پیوند ایمیل به پیوندهای دینامیک Firebase متکی است، همه این پیوندها به جای آن در پلتفرم وب (موبایل) باز می‌شوند.

ورود شخص ثالث

برای جریان‌های ورود به سیستم شخص ثالث، Authentication Firebase به اعتبارنامه‌های ایمن ارائه‌دهندگان شخص ثالث مانند Twitter و Github متکی است.

اعتبار واقعی از ارائه دهندگان OpenID Connect مانند Google و Apple توسط شبیه ساز Authentication پذیرفته می شود. اعتبارنامه‌های ارائه‌دهندگان غیرOpenID Connect پشتیبانی نمی‌شوند.

ورود به سیستم ایمیل / پیامک

در برنامه‌های تولیدی، جریان‌های ورود ایمیل و پیامک شامل یک عملیات ناهمزمان است که در آن کاربر یک پیام دریافت‌شده را بررسی می‌کند و یک کد ورود به سیستم را در رابط ورود وارد می‌کند. شبیه ساز Authentication هیچ ایمیل یا پیام کوتاهی ارسال نمی کند، اما همانطور که در بالا توضیح داده شد، کدهای ورود را تولید می کند و آنها را به ترمینال خروجی می دهد تا در آزمایش استفاده شوند.

شبیه ساز از توانایی تعریف شماره تلفن های آزمایشی با کدهای ورود ثابت پشتیبانی نمی کند، همانطور که می توان با استفاده از کنسول Firebase انجام داد.

احراز هویت توکن سفارشی

شبیه ساز Authentication ، امضا یا انقضای توکن های سفارشی را تأیید نمی کند. این به شما امکان می دهد از توکن های دست ساز استفاده کنید و از توکن ها به طور نامحدود در نمونه سازی و سناریوهای آزمایش استفاده کنید.

محدود کردن نرخ / ضد سوء استفاده

شبیه ساز Authentication ویژگی های محدود کننده نرخ تولید یا ضد سوء استفاده را تکرار نمی کند.

توابع مسدود کردن

در مرحله تولید، کاربران پس از شروع هر دو رویداد beforeCreate و beforeSignIn یک بار در فضای ذخیره سازی نوشته می شوند. با این حال، به دلیل محدودیت‌های فنی، شبیه‌ساز Authentication دو بار برای ذخیره می‌نویسد، یک بار پس از ایجاد کاربر و دیگری پس از ورود به سیستم. این بدان معناست که برای کاربران جدید، می‌توانید با موفقیت getAuth().getUser() در beforeSignIn در شبیه‌ساز Authentication فراخوانی کنید، اما در هنگام تولید با خطا مواجه خواهید شد.

بعدش چی؟