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

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

قبل از شروع

  1. اگر قبلاً این کار را نکرده‌اید، پروژه Firebase ایجاد کنید و برنامه خود را ثبت کنید.
  2. از «مدیر بسته Swift» برای نصب و مدیریت وابستگی‌های Firebase استفاده کنید.

    1. در Xcode، با باز بودن پروژه برنامه، به File > Add Packages (فایل > افزودن بسته‌ها) پیمایش کنید.
    2. وقتی درخواست شد، مخزن کیت توسعه نرم‌افزار پلاتفرم‌های Firebase Apple را اضافه کنید:
    3.   https://github.com/firebase/firebase-ios-sdk.git
    4. کتابخانه Firebase Authentication را انتخاب کنید.
    5. پرچم -ObjC را به بخش پرچم‌های پیونددهنده دیگر در تنظیمات ساخت هدف اضافه کنید.
    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 پیوست کنید. همچنین باید تغییرات در نماینده برنامه را غیرفعال کنید. برای اطلاعات بیشتر، دستورالعمل‌های 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;
}

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