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

می‌توانید از Firebase Authentication برای ایجاد و استفاده از حساب‌های ناشناس موقت برای اصالت‌سنجی با Firebase استفاده کنید. از این حساب‌های موقت ناشناس می‌توان برای اجازه دادن به کاربرانی که هنوز در برنامه شما ثبت‌نام نکرده‌اند برای کار با داده‌های محافظت‌شده توسط قوانین امنیتی استفاده کرد. اگر کاربر ناشناسی تصمیم بگیرد در برنامه شما ثبت‌نام کند، می‌توانید اعتبارنامه‌های ورود به سیستم او را به حساب ناشناس پیوند دهید تا بتواند در جلسات آینده نیز با داده‌های محافظت‌شده‌اش کار کند.

قبل از شروع

  1. از «مدیر بسته 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 به‌طور خودکار شروع به حل و بارگیری وابستگی‌های شما در پس‌زمینه می‌کند.
  2. اگر هنوز برنامه‌تان را به پروژه Firebase متصل نکرده‌اید، این کار را از کنسول Firebase انجام دهید.
  3. فعال کردن اصالت‌سنجی ناشناس:
    1. در کنسول Firebase، به امنیت > اصالت‌سنجی بروید.
    2. در زبانه روش ورود به سیستم، ارائه‌دهنده ورود به سیستم ناشناس را فعال کنید.
    3. اختیاری: اگر پروژه‌تان را به Firebase Authentication with Identity Platform ارتقا داده‌اید، می‌توانید پاک‌سازی خودکار را فعال کنید. وقتی این تنظیم را فعال می‌کنید، حساب‌های ناشناس قدیمی‌تر از ۳۰ روز به‌طور خودکار حذف خواهند شد. در پروژه‌هایی که پاک‌سازی خودکار در آن‌ها فعال است، اصالت‌سنجی ناشناس دیگر در محدودیت‌های استفاده یا سهمیه‌های صورت‌حساب محاسبه نخواهد شد. پاک‌سازی خودکار را ببینید.

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

وقتی کاربری که از سیستم خارج شده است از ویژگی برنامه‌ای استفاده می‌کند که به اصالت‌سنجی با 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. متد signInAnonymouslyWithCompletion: را فراخوانی کنید:

    Swift

    Auth.auth().signInAnonymously { authResult, error in
      // ...
    }

    Objective-C

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

    Swift

    guard let user = authResult?.user else { return }
    let isAnonymous = user.isAnonymous  // true
    let uid = user.uid

    Objective-C

    FIRUser *user = authResult.user;
    BOOL isAnonymous = user.anonymous;  // YES
    NSString *uid = user.uid;

تبدیل حساب ناشناس به حساب دائمی

وقتی کاربر ناشناسی در برنامه شما ثبت‌نام می‌کند، ممکن است بخواهید به او اجازه دهید کارش را با حساب جدیدش ادامه دهد—برای مثال، ممکن است بخواهید مواردی را که کاربر قبل‌از ثبت‌نام به سبد خریدش اضافه کرده است در سبد خرید حساب جدیدش دردسترس قرار دهید. برای انجام این کار، مراحل زیر را تکمیل کنید:

  1. وقتی کاربر ثبت‌نام می‌کند، جریان ورود به سیستم را برای ارائه‌دهنده اصالت‌سنجی کاربر تا قبل‌از فراخوانی یکی از روش‌های FIRAuth.signInWith تکمیل کنید. برای مثال، دریافت کردن نشانه شناسایی Google کاربر، نشانه دسترسی Facebook، یا نشانی ایمیل و گذرواژه.
  2. FIRAuthCredential را برای ارائه‌دهنده اصالت‌سنجی جدید دریافت کنید:

    ‫ورود با Google
    Swift
    guard
      let authentication = user?.authentication,
      let idToken = authentication.idToken
    else {
      return
    }
    
    let credential = GoogleAuthProvider.credential(withIDToken: idToken,
                                                   accessToken: authentication.accessToken)
    Objective-C
    FIRAuthCredential *credential =
    [FIRGoogleAuthProvider credentialWithIDToken:result.user.idToken.tokenString
                                     accessToken:result.user.accessToken.tokenString];
    ورود به سیستم فیس‌بوک
    Swift
    let credential = FacebookAuthProvider
      .credential(withAccessToken: AccessToken.current!.tokenString)
    Objective-C
    FIRAuthCredential *credential = [FIRFacebookAuthProvider
        credentialWithAccessToken:[FBSDKAccessToken currentAccessToken].tokenString];
    ورود به سیستم با ایمیل و گذرواژه
    Swift
    let credential = EmailAuthProvider.credential(withEmail: email, password: password)
    Objective-C
    FIRAuthCredential *credential =
        [FIREmailAuthProvider credentialWithEmail:email
                                                 password:password];
  3. شیء FIRAuthCredential را به روش linkWithCredential:completion: کاربر واردشده منتقل کنید:

    Swift
        user.link(with: credential) { authResult, error in
      // ...
    }
    }
    Objective-C
        [[FIRAuth auth].currentUser linkWithCredential:credential
        completion:^(FIRAuthDataResult *result, NSError *_Nullable error) {
      // ...
    }];

اگر فراخوانی linkWithCredential:completion: موفقیت‌آمیز باشد، حساب جدید کاربر می‌تواند به داده‌های Firebase حساب ناشناس دسترسی پیدا کند.

پاک‌سازی خودکار

اگر پروژه‌تان را به Firebase Authentication with Identity Platform ارتقا داده‌اید، می‌توانید پاک‌سازی خودکار را در کنسول Firebase فعال کنید. وقتی این ویژگی را فعال می‌کنید، به Firebase اجازه می‌دهید حساب‌های ناشناس قدیمی‌تر از ۳۰ روز را به‌طور خودکار حذف کند. در پروژه‌هایی که پاک‌سازی خودکار در آن‌ها فعال است، اصالت‌سنجی ناشناس در محدودیت‌های استفاده یا سهمیه‌های صورت‌حساب محاسبه نمی‌شود.

  • هر حساب ناشناسی که پس‌از فعال کردن پاک‌سازی خودکار ایجاد شود ممکن است در هر زمانی پس‌از ۳۰ روز از ایجاد به‌طور خودکار حذف شود.
  • حساب‌های ناشناس موجود ۳۰ روز پس‌از فعال کردن پاک‌سازی خودکار واجدشرایط حذف خودکار خواهند بود.
  • اگر پاک‌سازی خودکار را خاموش کنید، هر حساب ناشناسی که برای حذف شدن زمان‌بندی شده باشد همچنان برای حذف شدن زمان‌بندی خواهد ماند.
  • اگر حساب ناشناسی را با پیوند دادن آن به هر روش ورود به سیستم «ارتقا دهید»، حساب به‌طور خودکار حذف نخواهد شد.

اگر می‌خواهید قبل‌از فعال کردن این ویژگی ببینید چند کاربر تحت تأثیر قرار می‌گیرند و پروژه خود را به Firebase Authentication with Identity Platform ارتقا داده‌اید، می‌توانید در is_anon در گزارش وقایع ابری براساس آن فیلتر کنید.

مراحل بعدی

اکنون که کاربران می‌توانند با Firebase احراز هویت کنند، می‌توانید دسترسی آن‌ها به داده‌ها در پایگاه داده Firebase خود را بااستفاده از قوانین Firebase کنترل کنید.