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

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

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

با شبیه ساز Authentication چه کاری می توانم انجام دهم؟

شبیه‌ساز Authentication شبیه‌سازی محلی با وفاداری بالا از سرویس‌های احراز هویت Firebase را ارائه می‌کند و بسیاری از عملکردهای موجود در Firebase Authentication تولیدی را ارائه می‌دهد. این شبیه ساز همراه با پلتفرم های اپل، اندروید و Web Firebase SDK به شما امکان می دهد:

  • ایجاد، به‌روزرسانی و مدیریت حساب‌های کاربری شبیه‌سازی‌شده برای آزمایش ایمیل/گذرواژه، شماره تلفن/پیامک، پیامک چند عاملی، و احراز هویت ارائه‌دهنده هویت شخص ثالث (مثلاً Google)
  • مشاهده و ویرایش کاربران شبیه سازی شده
  • نمونه اولیه سیستم های احراز هویت توکن سفارشی
  • پیام‌های مربوط به احراز هویت را در تب Emulator UI Logs بررسی کنید.

یک پروژه Firebase را انتخاب کنید

مجموعه شبیه ساز محلی Firebase محصولات را برای یک پروژه Firebase تقلید می کند.

برای انتخاب پروژه مورد استفاده، قبل از شروع شبیه سازها، در CLI firebase use . یا، می توانید پرچم --project را به هر فرمان شبیه ساز ارسال کنید.

Local Emulator Suite از شبیه سازی پروژه های Firebase واقعی و پروژه های آزمایشی پشتیبانی می کند.

نوع پروژه امکانات با شبیه سازها استفاده کنید
واقعی

یک پروژه Firebase واقعی پروژه ای است که شما ایجاد و پیکربندی کرده اید (به احتمال زیاد از طریق کنسول Firebase).

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

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

برای هر محصولی که شبیه‌سازی نمی‌کنید، برنامه‌ها و کد شما با منبع زنده (نمونه پایگاه داده، سطل ذخیره‌سازی، عملکرد و غیره) تعامل خواهند داشت.

نسخه ی نمایشی

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

شناسه های پروژه برای پروژه های نمایشی دارای پیشوند 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 یا پایگاه داده بیدرنگ نیازی به تنظیمات اضافی نیست. هنگامی که شبیه ساز Authentication پیکربندی می شود و شبیه سازهای دیگر در حال اجرا هستند، به طور خودکار با هم کار می کنند.

SDK های مدیریت

هنگامی که متغیر محیطی FIREBASE_AUTH_EMULATOR_HOST تنظیم شود، کیت توسعه نرم افزاری مدیریت Firebase به طور خودکار به شبیه ساز احراز هویت متصل می شود.

export FIREBASE_AUTH_EMULATOR_HOST="127.0.0.1:9099"

توجه داشته باشید که شبیه ساز Cloud Functions به طور خودکار از شبیه ساز Authentication آگاه است، بنابراین می توانید هنگام آزمایش ادغام بین توابع Cloud و شبیه سازهای Authentication از این مرحله صرف نظر کنید. متغیر محیطی به طور خودکار برای Admin SDK در توابع Cloud تنظیم می شود.

با مجموعه متغیر محیطی، Firebase Admin SDK ها شناسه های بدون امضا و کوکی های جلسه صادر شده توسط شبیه ساز احراز هویت (به ترتیب از طریق روش های verifyIdToken و createSessionCookie ) را برای تسهیل توسعه و آزمایش محلی می پذیرند. لطفاً مطمئن شوید که متغیر محیطی را در تولید تنظیم نکنید .

اگر می‌خواهید کد Admin SDK شما به یک شبیه‌ساز مشترک که در محیط دیگری اجرا می‌شود متصل شود، باید همان ID پروژه‌ای را که با استفاده از 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 در حال اجرا در حالت تولید رد می‌شوند (به عنوان مثال رفتار پیش‌فرض بدون مراحل راه‌اندازی که در بالا توضیح داده شد).

شبیه ساز را راه اندازی کنید

می توانید از شبیه ساز Authentication به صورت تعاملی از طریق رابط کاربری Emulator Suite و به صورت غیر تعاملی از طریق رابط REST محلی آن استفاده کنید. بخش‌های زیر موارد استفاده تعاملی و غیرتعاملی را پوشش می‌دهند.

برای راه‌اندازی شبیه‌ساز احراز هویت، رابط REST آن، و رابط کاربری Emulator Suite، اجرا کنید:

firebase emulators:start

برای احراز هویت ناشناس ، برنامه شما می‌تواند منطق ورود به سیستم را برای پلتفرم شما ( iOS ، Android ، وب ) اعمال کند.

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

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

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

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

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

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

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

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

استفاده از رابط کاربری Emulator Suite:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

آزمایش جریان های 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 در پلتفرم های پشتیبانی شده انجام می دهد، همانطور که در مستندات احراز هویت تولید توضیح داده شده است.

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

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

Cloud IAM

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

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

ورود شخص ثالث

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

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

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

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

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

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

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

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

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

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

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

بعدش چی؟