برنامه خود را به Firebase وصل کنید
اگر قبلاً SDK های Firebase را برای Flutter نصب و مقداردهی اولیه نکردهاید، این کار را انجام دهید.
احراز هویت فایربیس را به برنامه خود اضافه کنید
- از ریشه پروژه Flutter خود، دستور زیر را برای نصب افزونه اجرا کنید: - flutter pub add firebase_auth
- پس از اتمام، برنامه Flutter خود را بازسازی کنید: - flutter run
- افزونه را در کد Dart خود وارد کنید: - import 'package:firebase_auth/firebase_auth.dart';
برای استفاده از یک ارائهدهنده احراز هویت، باید آن را در کنسول Firebase فعال کنید. برای فعال کردن ورود با ایمیل/رمز عبور و هر ارائهدهنده هویت دیگری که برای برنامه خود میخواهید، به صفحه «روش ورود» در بخش احراز هویت Firebase بروید.
(اختیاری) نمونه اولیه و تست با مجموعه شبیهساز محلی Firebase
قبل از صحبت در مورد نحوه احراز هویت کاربران توسط برنامه شما، بیایید مجموعهای از ابزارهایی را که میتوانید برای نمونهسازی اولیه و آزمایش عملکرد احراز هویت استفاده کنید، معرفی کنیم: Firebase Local Emulator Suite. اگر در حال تصمیمگیری بین تکنیکها و ارائهدهندگان احراز هویت هستید، مدلهای داده مختلف را با دادههای عمومی و خصوصی با استفاده از احراز هویت و قوانین امنیتی Firebase امتحان میکنید، یا طرحهای رابط کاربری ورود به سیستم را نمونهسازی میکنید، توانایی کار به صورت محلی بدون استقرار سرویسهای زنده میتواند ایده خوبی باشد.
یک شبیهساز احراز هویت بخشی از مجموعه شبیهساز محلی است که به برنامه شما امکان میدهد با محتوا و پیکربندی پایگاه داده شبیهسازی شده، و همچنین به صورت اختیاری با منابع پروژه شبیهسازی شده شما (توابع، سایر پایگاههای داده و قوانین امنیتی) تعامل داشته باشد.
استفاده از شبیهساز احراز هویت فقط شامل چند مرحله است:
- اضافه کردن یک خط کد به فایل پیکربندی آزمایشی برنامه برای اتصال به شبیهساز. 
- از ریشه دایرکتوری پروژه محلی خود، - firebase emulators:start.
- استفاده از رابط کاربری Local Emulator Suite برای نمونهسازی تعاملی، یا REST API شبیهساز احراز هویت برای آزمایش غیرتعاملی. 
- برای مشخص کردن آدرس و پورت شبیهساز، - useAuthEmulator()را فراخوانی کنید:- Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); // Ideal time to initialize await FirebaseAuth.instance.useAuthEmulator('localhost', 9099); //... }
راهنمای مفصلی در «برنامه خود را به شبیهساز احراز هویت متصل کنید» موجود است. برای اطلاعات بیشتر، به معرفی مجموعه شبیهساز محلی مراجعه کنید.
حالا بیایید به نحوه احراز هویت کاربران ادامه دهیم.
وضعیت فعلی احراز هویت را بررسی کنید
Firebase Auth متدها و ابزارهای زیادی را برای شما فراهم میکند تا بتوانید احراز هویت امن را در برنامه جدید یا موجود Flutter خود ادغام کنید. در بسیاری از موارد، باید از وضعیت احراز هویت کاربر خود، مانند اینکه آیا وارد سیستم شده است یا از سیستم خارج شده است، مطلع شوید.
 Firebase Auth شما را قادر میسازد تا از طریق یک Stream به صورت بلادرنگ در این وضعیت مشترک شوید. پس از فراخوانی، Stream یک رویداد فوری از وضعیت احراز هویت فعلی کاربر ارائه میدهد و سپس هر زمان که وضعیت احراز هویت تغییر کند، رویدادهای بعدی را ارائه میدهد.
سه روش برای گوش دادن به تغییرات وضعیت احراز هویت وجود دارد:
 authStateChanges()
 برای ثبت این تغییرات، متد authStateChanges() را در نمونه FirebaseAuth خود فراخوانی کنید:
FirebaseAuth.instance
  .authStateChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });
رویدادها زمانی اجرا میشوند که موارد زیر رخ دهند:
- درست پس از ثبت نام شنونده.
- وقتی کاربری وارد سیستم میشود.
- وقتی کاربر فعلی از سیستم خارج میشود.
 idTokenChanges()
 برای ثبت این تغییرات، متد idTokenChanges() را در نمونه FirebaseAuth خود فراخوانی کنید:
FirebaseAuth.instance
  .idTokenChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });
رویدادها زمانی اجرا میشوند که موارد زیر رخ دهند:
- درست پس از ثبت نام شنونده.
- وقتی کاربری وارد سیستم میشود.
- وقتی کاربر فعلی از سیستم خارج میشود.
- وقتی تغییری در توکن کاربر فعلی ایجاد شود.
- کاربر پس از اصلاح ادعاهای سفارشی، وارد سیستم میشود یا دوباره احراز هویت میشود. توکن شناسهای که در نتیجه صادر میشود، حاوی آخرین ادعاها خواهد بود.
- یک نشست کاربری موجود، توکن شناسه خود را پس از انقضای توکن قدیمیتر، بهروزرسانی میکند.
-  یک توکن شناسه با فراخوانی FirebaseAuth.instance.currentUser.getIdTokenResult(true)به زور رفرش میشود.
برای جزئیات بیشتر، به بخش «ارسال ادعاهای سفارشی به مشتری» مراجعه کنید.
 userChanges()
 برای ثبت این تغییرات، متد userChanges() را در نمونه FirebaseAuth خود فراخوانی کنید:
FirebaseAuth.instance
  .userChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });
رویدادها زمانی اجرا میشوند که موارد زیر رخ دهند:
- درست پس از ثبت نام شنونده.
- وقتی کاربری وارد سیستم میشود.
- وقتی کاربر فعلی از سیستم خارج میشود.
- وقتی تغییری در توکن کاربر فعلی ایجاد شود.
-  وقتی متدهای زیر که توسط FirebaseAuth.instance.currentUserارائه میشوند، فراخوانی شوند:-  reload()
-  unlink()
-  updateEmail()
-  updatePassword()
-  updatePhoneNumber()
-  updateProfile()
 
-  
 اگر User را با استفاده از SDK مدیریت Firebase یا کنسول Firebase غیرفعال یا حذف کنید، idTokenChanges() ، userChanges() و authStateChanges() نیز اجرا نخواهند شد. شما باید با استفاده از FirebaseAuth.instance.currentUser.reload() صفحه را مجدداً بارگذاری کنید، که باعث ایجاد خطای user-disabled یا user-not-found میشود که میتوانید آن را در کد برنامه خود دریافت و مدیریت کنید.
وضعیت احراز هویت پایدار
کیتهای توسعه نرمافزار (SDK) فایربیس برای همه پلتفرمها، پشتیبانی آمادهای را برای اطمینان از حفظ وضعیت احراز هویت کاربر در طول راهاندازی مجدد برنامه یا بارگذاری مجدد صفحه ارائه میدهند.
در پلتفرمهای بومی مانند اندروید و iOS، این رفتار قابل تنظیم نیست و وضعیت احراز هویت کاربر بین راهاندازی مجدد برنامه در دستگاه باقی میماند. کاربر میتواند دادههای ذخیرهشده در حافظه پنهان برنامهها را با استفاده از تنظیمات دستگاه پاک کند، که این کار هرگونه وضعیت ذخیرهشده موجود را پاک میکند.
 در پلتفرمهای وب، وضعیت احراز هویت کاربر در IndexedDB ذخیره میشود. میتوانید با استفاده از Persistence.LOCAL ، ماندگاری را به گونهای تغییر دهید که دادهها در حافظه محلی ذخیره شوند. در صورت نیاز، میتوانید این رفتار پیشفرض را به گونهای تغییر دهید که فقط وضعیت احراز هویت برای جلسه فعلی حفظ شود یا اصلاً حفظ نشود. برای پیکربندی این تنظیمات، متد زیر را فراخوانی کنید FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.LOCAL); . همچنان میتوانید ماندگاری را برای هر نمونه Auth با استفاده از setPersistence(Persistence.NONE) بهروزرسانی کنید.
// Disable persistence on web platforms. Must be called on initialization:
final auth = FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.NONE);
// To change it after initialization, use `setPersistence()`:
await auth.setPersistence(Persistence.LOCAL);
مراحل بعدی
راهنماهای مربوط به ورود و ثبتنام کاربران با سرویسهای هویت و احراز هویت پشتیبانیشده را بررسی کنید.