אימות עם Firebase בפלטפורמות של Apple באמצעות מערכת אימות בהתאמה אישית

אפשר לשלב את Firebase Authentication עם מערכת אימות בהתאמה אישית באמצעות לשנות את שרת האימות כדי להפיק אסימונים חתומים בהתאמה אישית כשמשתמש נכנס בהצלחה. האפליקציה שלך מקבלת את האסימון הזה ומשתמשת בו כדי לאמת עם Firebase.

לפני שמתחילים

  1. יצירת פרויקט Firebase ורישום האפליקציה אם עדיין לא עשיתם זאת.
  2. שימוש ב-Swift Package Manager כדי להתקין ולנהל יחסי תלות של Firebase.

    1. ב-Xcode, כשפרויקט האפליקציה פתוח, עוברים אל File > (קובץ >) הוספת חבילות.
    2. כשמופיעה בקשה, מוסיפים את המאגר של Firebase SDK לפלטפורמות של Apple:
    3.   https://github.com/firebase/firebase-ios-sdk.git
    4. בוחרים את הספרייה Firebase Authentication.
    5. מוסיפים את הדגל -ObjC לקטע סימונים של מקשר אחר בהגדרות ה-build של היעד.
    6. בסיום, Xcode יתחיל לפתור את הבעיה ותוריד את של יחסי התלות ברקע.
  3. משיגים את מפתחות השרת של הפרויקט:
    1. עוברים לדף Service Accounts בהגדרות הפרויקט.
    2. לוחצים על Generate New Private Key (יצירת מפתח פרטי חדש) בתחתית הקטע Firebase Admin SDK בדף Service Accounts.
    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, עליכם ליצור נציג אפליקציה ולצרף אותו למבנה App דרך UIApplicationDelegateAdaptor או NSApplicationDelegateAdaptor. צריך גם להשבית את האפשרות להענקת גישה לאפליקציה. מידע נוסף זמין בהוראות ל-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;
}

כדאי גם להוסיף קוד טיפול בשגיאות לכל טווח האימות שגיאות. אפשר לקרוא על טיפול בשגיאות.