برنامه خود را به Firebase وصل کنید
اگر قبلاً این کار را نکرده اید ، SDK های Firebase را برای Flutter نصب و مقداردهی اولیه کنید .
احراز هویت Firebase را به برنامه خود اضافه کنید
از ریشه پروژه Flutter خود، دستور زیر را برای نصب افزونه اجرا کنید:
flutter pub add firebase_auth
پس از تکمیل، برنامه Flutter خود را بازسازی کنید:
flutter run
افزونه را در کد دارت خود وارد کنید:
import 'package:firebase_auth/firebase_auth.dart';
برای استفاده از یک ارائه دهنده احراز هویت، باید آن را در کنسول Firebase فعال کنید. به صفحه Sign-in Method در بخش Firebase Authentication بروید تا ورود ایمیل/گذرواژه و سایر ارائه دهندگان هویتی را که می خواهید برای برنامه خود فعال کنید.
(اختیاری) نمونه اولیه و آزمایش با Firebase Local Emulator Suite
قبل از صحبت در مورد اینکه برنامه شما چگونه کاربران را احراز هویت میکند، بیایید مجموعهای از ابزارها را معرفی کنیم که میتوانید از آنها برای نمونهسازی اولیه و آزمایش عملکرد احراز هویت استفاده کنید: Firebase Local Emulator Suite. اگر از میان تکنیکها و ارائهدهندگان احراز هویت تصمیم میگیرید، آزمایش مدلهای مختلف داده با دادههای عمومی و خصوصی با استفاده از احراز هویت و قوانین امنیتی Firebase، یا نمونهسازی طرحهای UI ورود به سیستم، امکان کار به صورت محلی بدون استقرار سرویسهای زنده میتواند ایده خوبی باشد. .
شبیهساز احراز هویت بخشی از Local Emulator Suite است که به برنامه شما امکان میدهد با محتوای پایگاه داده شبیهسازیشده و پیکربندی، و همچنین بهصورت اختیاری منابع پروژه شبیهسازی شده شما (توابع، سایر پایگاههای داده و قوانین امنیتی) تعامل داشته باشد.
استفاده از شبیه ساز Authentication تنها شامل چند مرحله است:
افزودن یک خط کد به پیکربندی آزمایشی برنامه برای اتصال به شبیه ساز.
از ریشه دایرکتوری پروژه محلی خود،
firebase emulators:start
اجرا کنید.استفاده از Local Emulator Suite UI برای نمونه سازی تعاملی، یا Authentication emulator REST API برای تست غیرتعاملی.
برای تعیین آدرس شبیه ساز و پورت،
useAuthEmulator()
را فراخوانی کنید:Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); // Ideal time to initialize await FirebaseAuth.instance.useAuthEmulator('localhost', 9099); //... }
راهنمای دقیق در اتصال برنامه خود به شبیهساز احراز هویت موجود است. برای اطلاعات بیشتر، به معرفی Local Emulator Suite مراجعه کنید.
حالا بیایید به نحوه احراز هویت کاربران ادامه دهیم.
وضعیت اعتبار فعلی را بررسی کنید
Firebase Auth روش ها و ابزارهای زیادی را برای شما فراهم می کند تا احراز هویت ایمن را در برنامه جدید یا موجود Flutter خود ادغام کنید. در بسیاری از موارد، شما باید در مورد وضعیت احراز هویت کاربر خود بدانید، مانند اینکه آیا آنها به سیستم وارد شده اند یا از سیستم خارج شده اند.
Firebase Auth شما را قادر میسازد تا از طریق 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!');
}
});
رویدادها زمانی فعال می شوند که موارد زیر رخ دهد:
- بلافاصله پس از ثبت شنونده.
- هنگامی که یک کاربر وارد شده است.
- وقتی کاربر فعلی از سیستم خارج شده است.
- زمانی که تغییری در توکن کاربر فعلی ایجاد شود.
- یک کاربر پس از اصلاح ادعاهای سفارشی وارد سیستم می شود یا دوباره احراز هویت می کند. رمز شناسایی صادر شده در نتیجه حاوی آخرین ادعاها خواهد بود.
- یک جلسه کاربر موجود پس از انقضای یک توکن قدیمی، رمز شناسه خود را به روز می کند.
- یک نشانه ID با فراخوانی
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
با Firebase Admin SDK یا کنسول Firebase غیرفعال یا حذف کنید، idTokenChanges()
، userChanges()
و authStateChanges()
نیز فعال نمی شوند. باید با استفاده از FirebaseAuth.instance.currentUser.reload()
یک بارگیری مجدد انجام دهید، که باعث می شود یک استثنا user-disabled
یا user-not-found
که می توانید آن را بگیرید و در کد برنامه خود مدیریت کنید.
وضعیت احراز هویت پایدار
SDKهای Firebase برای همه پلتفرمها برای اطمینان از اینکه وضعیت احراز هویت کاربر در طول راهاندازی مجدد برنامه یا بارگذاری مجدد صفحه ادامه دارد، پشتیبانی خارج از جعبه را فراهم میکند.
در پلتفرمهای بومی مانند Android و 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);
مراحل بعدی
راهنماهای مربوط به ورود و ثبت نام کاربران با خدمات هویت و احراز هویت پشتیبانی شده را بررسی کنید.