Check out what’s new from Firebase at Google I/O 2022. Learn more

使用自定義身份驗證系統在 Apple 平台上通過 Firebase 進行身份驗證

您可以將 Firebase 身份驗證與自定義身份驗證系統集成,方法是修改身份驗證服務器以在用戶成功登錄時生成自定義簽名令牌。您的應用接收此令牌並使用它向 Firebase 進行身份驗證。

在你開始之前

使用 Swift Package Manager 安裝和管理 Firebase 依賴項。

  1. 在 Xcode 中,打開您的應用項目,導航到File > Add Packages
  2. 出現提示時,添加 Firebase Apple 平台 SDK 存儲庫:
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. 選擇 Firebase 身份驗證庫。
  5. 完成後,Xcode 將在後台自動開始解析和下載您的依賴項。

接下來,執行一些配置步驟:

  1. 獲取項目的服務器密鑰:
    1. 轉到項目設置中的服務帳戶頁面。
    2. 點擊服務帳戶頁面的Firebase Admin SDK部分底部的生成新私鑰
    3. 新服務帳戶的公鑰/私鑰對會自動保存在您的計算機上。將此文件複製到您的身份驗證服務器。

使用 Firebase 進行身份驗證

  1. 在您的UIApplicationDelegate中導入FirebaseCore模塊,以及您的應用委託使用的任何其他Firebase 模塊。例如,要使用 Cloud Firestore 和身份驗證:

    迅速

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. 配置FirebaseApp共享實例,通常在您應用的application:didFinishLaunchingWithOptions:方法中:

    迅速

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. 當用戶登錄您的應用程序時,將他們的登錄憑據(例如,他們的用戶名和密碼)發送到您的身份驗證服務器。您的服務器檢查憑據並在它們有效時返回自定義令牌
  4. 從身份驗證服務器收到自定義令牌後,將其傳遞給signInWithCustomToken以登錄用戶:

    迅速

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

    Objective-C

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

下一步

用戶首次登錄後,會創建一個新用戶帳戶並將其鏈接到憑據(即用戶名和密碼、電話號碼或身份驗證提供商信息),即用戶登錄時使用的憑據。這個新帳戶作為 Firebase 項目的一部分存儲,可用於在項目中的每個應用中識別用戶,無論用戶如何登錄。

  • 在您的應用程序中,您可以從FIRUser對象獲取用戶的基本個人資料信息。請參閱管理用戶

  • 在您的 Firebase 實時數據庫和雲存儲安全規則中,您可以從auth變量中獲取登錄用戶的唯一用戶 ID,並使用它來控制用戶可以訪問哪些數據。

您可以通過將身份驗證提供程序憑據鏈接到現有用戶帳戶來允許用戶使用多個身份驗證提供程序登錄您的應用程序。

要註銷用戶,請調用signOut:

迅速

    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;
}

您可能還想為所有身份驗證錯誤添加錯誤處理代碼。請參閱處理錯誤