اصالت‌سنجی با Firebase در پلاتفرم‌های Apple بااستفاده از سیستم اصالت‌سنجی سفارشی

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

قبل از شروع

  1. پروژه Firebase ایجاد کنید و برنامه‌تان را ثبت کنید (اگر قبلاً این کار را نکرده‌اید).
  2. از Swift Package Manager برای نصب و مدیریت وابستگی‌های Firebase استفاده کنید.

    1. در Xcode، درحالی‌که پروژه برنامه‌تان باز است، به File > Add Packages (فایل > افزودن بسته‌ها) بروید.
    2. وقتی خواسته شد، مخزن کیت توسعه نرم‌افزار Firebase برای پلاتفرم‌های Apple را اضافه کنید:
    3.   https://github.com/firebase/firebase-ios-sdk.git
    4. کتابخانه Firebase Authentication را انتخاب کنید.
    5. پرچم -ObjC را به بخش Other Linker Flags (سایر پرچم‌های پیونددهنده) در تنظیمات ساخت هدف اضافه کنید.
    6. وقتی تمام شد، Xcode به‌طور خودکار شروع به حل و بارگیری وابستگی‌های شما در پس‌زمینه می‌کند.
  3. کلیدهای سرور پروژه‌تان را دریافت کنید:
    1. در کنسول Firebase، به تنظیمات > حساب‌های سرویس بروید.
    2. در پایین بخش Firebase Admin SDK، روی تولید کلید خصوصی جدید کلیک کنید.
    3. جفت کلید عمومی/خصوصی حساب سرویس جدید به‌طور خودکار در رایانه‌تان ذخیره می‌شود. این فایل را در سرور اصالت‌سنجی‌تان کپی کنید.

اصالت‌سنجی با Firebase

  1. واحد FirebaseCore را در UIApplicationDelegate و همچنین هر واحد Firebase دیگری که نماینده برنامه‌تان استفاده می‌کند وارد کنید. برای مثال، برای استفاده از Cloud Firestore و Authentication:

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. یک FirebaseApp نمونه مشترک را در روش application(_:didFinishLaunchingWithOptions:) نماینده برنامه‌تان پیکربندی کنید:

    SwiftUI

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. اگر از SwiftUI استفاده می‌کنید، باید یک نماینده برنامه ایجاد کنید و آن را ازطریق UIApplicationDelegateAdaptor یا NSApplicationDelegateAdaptor به ساختار App خود متصل کنید. همچنین باید swizzling نماینده برنامه را غیرفعال کنید. برای اطلاعات بیشتر، دستورالعمل‌های SwiftUI را ببینید.

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  4. وقتی کاربران به سیستم برنامه شما وارد می‌شوند، اطلاعات اعتباری ورود به سیستم آن‌ها (برای مثال، نام کاربری و گذرواژه آن‌ها) را به سرور اصالت‌سنجی خود ارسال کنید. سرور شما اعتبارنامه را بررسی می‌کند و اگر معتبر باشد، رمز سفارشی برمی‌گرداند.
  5. پس‌از دریافت کردن کد سفارشی از سرور اصالت‌سنجی، آن را به signInWithCustomToken ارسال کنید تا کاربر به سیستم وارد شود:

    Swift

    Auth.auth().signIn(withCustomToken: customToken ?? "") { user, error in
      // ...
    }

    Objective-C

    [[FIRAuth auth] signInWithCustomToken:customToken
                               completion:^(FIRAuthDataResult * _Nullable authResult,
                                            NSError * _Nullable error) {
      // ...
    }];

مراحل بعدی

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

  • در برنامه‌هایتان، می‌توانید اطلاعات نمایه پایه کاربر را از شیء User دریافت کنید. مدیریت کاربران را ببینید.

  • در Firebase Realtime Database و Cloud Storage قوانین امنیتی، می‌توانید شناسه کاربر منحصربه‌فرد کاربر واردشده به سیستم را از متغیر auth دریافت کنید، و از آن برای کنترل داده‌هایی که کاربر می‌تواند به آن‌ها دسترسی داشته باشد استفاده کنید.

می‌توانید به کاربران اجازه دهید بااستفاده از چندین ارائه‌دهنده اصالت‌سنجی به سیستم برنامه‌تان وارد شوند. برای این کار، اعتبارنامه ارائه‌دهنده اصالت‌سنجی را به حساب کاربری موجود پیوند دهید.

برای خارج کردن کاربر از سیستم، signOut: را فراخوانی کنید.

Swift

let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}

Objective-C

NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

همچنین ممکن است بخواهید کد رسیدگی به خطا را برای طیف کامل خطاهای اصالت‌سنجی اضافه کنید. رسیدگی به خطاها را ببینید.