اصالت‌سنجی با Firebase بااستفاده از «حساب‌های مبتنی بر گذرواژه» در «پلاتفرم‌های Apple»

می‌توانید از Firebase Authentication استفاده کنید تا به کاربران اجازه دهید بااستفاده از نشانی‌های ایمیل و گذرواژه‌هایشان در Firebase اصالت‌سنجی کنند و حساب‌های مبتنی بر گذرواژه برنامه‌تان را مدیریت کنند.

برای دریافت کمک از هوش مصنوعی، پیام‌واره زیر را در عامل کدنویسی هوش مصنوعی خود (مثل Antigravity،‏ Claude Code،‏ Codex، و Cursor) کپی کنید. می‌توانید پیام‌واره را سفارشی‌سازی کنید و با نماینده‌تان تکرار کنید. برای اطلاعات دقیق نصب، به مهارت‌های عامل Firebase مراجعه کنید.

Help me use Firebase in my app.
1. Make sure that **Firebase agent skills** are installed and updated. For Claude Code, Codex, or Cursor agents, help me install the Firebase plugin. For other agents, run `npx skills add firebase/agent-skills`. Always try to use **Firebase agent skills** for Firebase-related tasks.
2. Help me set up and use Firebase Authentication with email and password authentication in my app.

قبل از شروع

از «مدیر بسته 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 به‌طور خودکار شروع به حل و بارگیری وابستگی‌های شما در پس‌زمینه می‌کند.

سپس، چند مرحله پیکربندی را انجام دهید:

  1. اگر هنوز برنامه‌تان را به پروژه Firebase متصل نکرده‌اید، این کار را از کنسول Firebase انجام دهید.
  2. «ایمیل/گذرواژه» را به‌عنوان ارائه‌دهنده ورود به سیستم برای پروژه Firebase خود فعال کنید:
    1. در کنسول Firebase، به امنیت > اصالت‌سنجی بروید.
    2. در برگه روش ورود به سیستم، ارائه‌دهنده ورود به سیستم ایمیل/گذرواژه را فعال کنید.
    3. روی ذخیره کردن کلیک کنید.

ایجاد حساب مبتنی بر گذرواژه

برای ایجاد حساب کاربری جدید با گذرواژه، مراحل زیر را در فعالیت ورود به سیستم برنامه‌تان تکمیل کنید:

  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. با ارسال نشانی ایمیل و گذرواژه کاربر جدید به createUser، حساب جدیدی ایجاد کنید.

    Swift

    Auth.auth().createUser(withEmail: email, password: password) { authResult, error in
      // ...
    }

    Objective-C

    [[FIRAuth auth] createUserWithEmail:email
                               password:password
                             completion:^(FIRAuthDataResult * _Nullable authResult,
                                          NSError * _Nullable error) {
      // ...
    }];
    اگر حساب جدید باموفقیت ایجاد شد، کاربر به سیستم وارد می‌شود و شما می‌توانید داده‌های حساب کاربر را از شیء نتیجه‌ای که به روش برگشتی ارسال می‌شود دریافت کنید.

کاربری را با نشانی ایمیل و گذرواژه به سیستم وارد کنید

مراحل ورود به سیستم کاربر با گذرواژه مشابه مراحل ایجاد حساب جدید است. در فعالیت ورود به سیستم برنامه‌تان، این کارها را انجام دهید:

  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. وقتی کاربری به سیستم برنامه‌تان وارد می‌شود، نشانی ایمیل و گذرواژه کاربر را به signIn ارسال کنید.

    Swift

    Auth.auth().signIn(withEmail: email, password: password) { [weak self] authResult, error in
      guard let strongSelf = self else { return }
      // ...
    }

    Objective-C

    [[FIRAuth auth] signInWithEmail:self->_emailField.text
                           password:self->_passwordField.text
                         completion:^(FIRAuthDataResult * _Nullable authResult,
                                      NSError * _Nullable error) {
      // ...
    }];
    اگر کاربر باموفقیت به سیستم وارد شود، می‌توانید داده‌های حساب کاربر را از شیء نتیجه‌ای که به روش برگشتی ارسال می‌شود دریافت کنید.

توصیه‌شده: خط‌مشی گذرواژه تنظیم کنید

با اعمال الزامات پیچیدگی گذرواژه می‌توانید امنیت حساب را بهبود دهید.

برای پیکربندی خط‌مشی گذرواژه برای پروژه، بخش خط‌مشی گذرواژه را در برگه امنیت > اصالت‌سنجی > تنظیمات کنسول Firebase باز کنید:

تنظیمات اصالت‌سنجی

خط‌مشی‌های گذرواژه Firebase Authentication از الزامات گذرواژه زیر پشتیبانی می‌کنند:

  • نویسه حرف کوچک لازم است

  • نویسه حروف بزرگ لازم است

  • نویسه عددی لازم است

  • نویسه غیرالفباعددی لازم است

    نویسه‌های زیر شرط نویسه غیرالفباعددی را برآورده می‌کنند: ^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~

  • حداقل طول گذرواژه (از ۶ تا ۳۰ نویسه متغیر است؛ مقدار پیش‌فرض ۶ است)

  • حداکثر طول گذرواژه (حداکثر طول ۴۰۹۶ نویسه)

می‌توانید اجرای خط‌مشی گذرواژه را در دو حالت فعال کنید:

  • الزامی: تلاش برای ثبت‌نام تا زمانی‌که کاربر گذرواژه‌ای مطابق با خط‌مشی شما به‌روزرسانی نکند ناموفق خواهد بود.

  • اعلان: کاربران مجازند با گذرواژه غیرمنطبق ثبت‌نام کنند. هنگام استفاده از این حالت، باید بررسی کنید که آیا گذرواژه کاربر با خط‌مشی سمت مشتری مطابقت دارد یا نه و اگر مطابقت ندارد، به نحوی از کاربر بخواهید گذرواژه خود را به‌روز کند.

کاربران جدید همیشه ملزم به انتخاب گذرواژه‌ای هستند که با خط‌مشی شما مطابقت داشته باشد.

اگر کاربر فعال دارید، توصیه می‌کنیم ارتقای اجباری را در ورود به سیستم فعال نکنید مگر اینکه قصد داشته باشید دسترسی کاربرانی را که گذرواژه‌هایشان با خط‌مشی شما مطابقت ندارد مسدود کنید. به‌جای آن، از حالت اعلان استفاده کنید که به کاربران امکان می‌دهد با گذرواژه‌های فعلی‌شان به سیستم وارد شوند و به آن‌ها اطلاع می‌دهد که گذرواژه‌شان چه شرایطی را ندارد.

توصیه می‌شود: محافظت دربرابر شمارش ایمیل را فعال کنید

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

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

توجه داشته باشید که فعال کردن این ویژگی رفتار گزارش خطا را برای Firebase Authentication تغییر می‌دهد، بنابراین مطمئن شوید که برنامه‌تان به خطاهای خاص‌تر متکی نباشد.

مراحل بعدی

پس‌از اینکه کاربر برای اولین‌بار به سیستم وارد شد، حساب کاربری جدیدی ایجاد می‌شود و به اطلاعات اعتباری—یعنی نام کاربری و گذرواژه، شماره تلفن، یا اطلاعات ارائه‌دهنده اصالت‌سنجی—که کاربر با آن به سیستم وارد شده است پیوند داده می‌شود. این حساب جدید به‌عنوان بخشی از پروژه 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;
}

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