شما میتوانید Firebase Authentication با یک سیستم احراز هویت سفارشی ادغام کنید، به این صورت که سرور احراز هویت خود را طوری تغییر دهید که وقتی کاربر با موفقیت وارد سیستم میشود، توکنهای امضا شده سفارشی تولید کند. برنامه شما این توکن را دریافت کرده و از آن برای احراز هویت با فایربیس استفاده میکند.
قبل از اینکه شروع کنی
- یک پروژه Firebase ایجاد کنید و اگر قبلاً برنامه خود را ثبت نکردهاید، آن را ثبت کنید .
برای نصب و مدیریت وابستگیهای Firebase از Swift Package Manager استفاده کنید.
- در Xcode، با باز کردن پروژه برنامه خود، به File > Add Packages بروید.
- وقتی از شما خواسته شد، مخزن SDK پلتفرمهای اپل فایربیس را اضافه کنید:
- کتابخانه Firebase Authentication را انتخاب کنید.
- پرچم
-ObjCرا به بخش Other Linker Flags در تنظیمات ساخت هدف خود اضافه کنید. - پس از اتمام، Xcode به طور خودکار شروع به حل و دانلود وابستگیهای شما در پسزمینه میکند.
https://github.com/firebase/firebase-ios-sdk.git
- کلیدهای سرور پروژه خود را دریافت کنید:
- به صفحه حسابهای سرویس در تنظیمات پروژه خود بروید.
- در پایین بخش Firebase Admin SDK از صفحه حسابهای سرویس ، روی «ایجاد کلید خصوصی جدید» کلیک کنید.
- جفت کلید عمومی/خصوصی حساب سرویس جدید به طور خودکار در رایانه شما ذخیره میشود. این فایل را در سرور احراز هویت خود کپی کنید.
احراز هویت با فایربیس
- ماژول
FirebaseCoreرا درUIApplicationDelegateخود وارد کنید، و همچنین هر ماژول Firebase دیگری که app delegate شما از آن استفاده میکند. به عنوان مثال، برای استفاده از Cloud Firestore و Authentication :سویفتیوآی
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
سویفت
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
هدف-سی
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- یک نمونه اشتراکی
FirebaseAppدرapplication(_:didFinishLaunchingWithOptions:)از نماینده برنامه خود پیکربندی کنید:سویفتیوآی
// Use Firebase library to configure APIs FirebaseApp.configure()
سویفت
// Use Firebase library to configure APIs FirebaseApp.configure()
هدف-سی
// Use Firebase library to configure APIs [FIRApp configure];
- اگر از SwiftUI استفاده میکنید، باید یک نماینده برنامه ایجاد کنید و آن را از طریق
UIApplicationDelegateAdaptorیاNSApplicationDelegateAdaptorبه ساختارAppخود پیوست کنید. همچنین باید swizzling نماینده برنامه را غیرفعال کنید. برای اطلاعات بیشتر، به دستورالعملهای SwiftUI مراجعه کنید.سویفتیوآی
@main struct YourApp: App { // register app delegate for Firebase setup @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { NavigationView { ContentView() } } } }
- وقتی کاربران وارد برنامه شما میشوند، اطلاعات ورود آنها (مثلاً نام کاربری و رمز عبور) را به سرور احراز هویت شما ارسال میکنند. سرور شما اطلاعات را بررسی میکند و در صورت معتبر بودن، یک توکن سفارشی برمیگرداند.
- پس از دریافت توکن سفارشی از سرور احراز هویت خود، آن را به
signInWithCustomTokenارسال کنید تا کاربر وارد سیستم شود:سویفت
Auth.auth().signIn(withCustomToken: customToken ?? "") { user, error in // ... }
هدف-سی
[[FIRAuth auth] signInWithCustomToken:customToken completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { // ... }];
مراحل بعدی
پس از اینکه کاربر برای اولین بار وارد سیستم میشود، یک حساب کاربری جدید ایجاد میشود و به اطلاعات احراز هویت - یعنی نام کاربری و رمز عبور، شماره تلفن یا اطلاعات ارائه دهنده مجوز - که کاربر با آن وارد سیستم شده است، پیوند داده میشود. این حساب جدید به عنوان بخشی از پروژه Firebase شما ذخیره میشود و میتواند برای شناسایی کاربر در هر برنامه در پروژه شما، صرف نظر از نحوه ورود کاربر، مورد استفاده قرار گیرد.
در برنامههای خود، میتوانید اطلاعات اولیه پروفایل کاربر را از شیء
Userدریافت کنید. به بخش مدیریت کاربران مراجعه کنید.در قوانین امنیتی پایگاه داده و Cloud Storage Firebase Realtime Database ، میتوانید شناسه کاربری منحصر به فرد کاربر وارد شده را از متغیر
authدریافت کنید و از آن برای کنترل دادههایی که کاربر میتواند به آنها دسترسی داشته باشد، استفاده کنید.
برای خروج از سیستم کاربر، تابع signOut: را فراخوانی کنید.
سویفت
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print("Error signing out: %@", signOutError) }
هدف-سی
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }
همچنین میتوانید کد مدیریت خطا را برای طیف کامل خطاهای احراز هویت اضافه کنید. به بخش مدیریت خطاها مراجعه کنید.