在 Apple 平台上使用密碼型帳戶向 Firebase 驗證

您可以使用 Firebase Authentication 讓使用者透過 Firebase 使用自己的電子郵件地址和密碼,管理應用程式的 使用 API

事前準備

使用 Swift Package Manager 安裝及管理 Firebase 依附元件。

  1. 在 Xcode 中保持開啟應用程式專案,然後前往「檔案」檔案 >新增套件
  2. 在系統提示時,新增 Firebase Apple 平台 SDK 存放區:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. 選擇 Firebase Authentication 程式庫。
  5. 在目標建構設定的「Other Linker Flags」部分中新增 -ObjC 標記。
  6. 完成後,Xcode 就會自動開始在背景中解析並下載依附元件。

接下來,請執行一些設定步驟:

  1. 如果您尚未將應用程式連結至 Firebase 專案,請前往 Firebase 控制台
  2. 啟用電子郵件/密碼登入功能:
    1. Firebase 主控台中,開啟「Auth」部分。
    2. 在「Sign in method」分頁中啟用「Email/password」登入功能 方法並點選「儲存」

建立以密碼為基礎的帳戶

如要以密碼建立新的使用者帳戶,請完成下列步驟: 應用程式的登入活動:

  1. FirebaseCore 模組匯入至 UIApplicationDelegate和任何其他 應用程式委派所用的 Firebase 模組。 例如,如要使用 Cloud FirestoreAuthentication

    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,則必須建立並附加應用程式委派 透過 UIApplicationDelegateAdaptorApp NSApplicationDelegateAdaptor。您也必須停用應用程式委派程式 swizzling。詳情請參閱 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. 當新使用者透過應用程式的註冊表單註冊時,請完成新的使用者 帳戶驗證步驟,例如驗證 已正確輸入新帳戶的密碼,符合您的複雜程度 Google Cloud 就是最佳選擇
  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. UIApplicationDelegate 中匯入 FirebaseCore 模組,以及應用程式委派程式使用的任何其他 Firebase 模組。例如,如要使用 Cloud FirestoreAuthentication

    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. 在應用程式委派作業的 application(_:didFinishLaunchingWithOptions:) 方法中,設定 FirebaseApp 共用例項:

    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,則必須建立應用程式委派程式,並透過 UIApplicationDelegateAdaptorNSApplicationDelegateAdaptor 將其附加至 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 密碼政策支援下列密碼規定:

  • 必須輸入小寫字元

  • 必須輸入大寫字元

  • 必須輸入數字字元

  • 必須輸入非英數字元

    下列字元符合非英數字元的規定: ^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~

  • 密碼長度下限 (範圍為 6 到 30 個字元,預設為 6)

  • 密碼長度上限 (長度上限為 4096 個半形字元)

您可以透過兩種模式啟用密碼政策強制執行功能:

  • 要求:在使用者更新密碼前嘗試登入失敗 符合您的政策

  • 通知:使用者可以使用不合規定的密碼登入。時間 在這個模式下,您應檢查使用者的密碼是否符合 並提示使用者更新 密碼。

新使用者一律須選擇符合 政策。

如果您有活躍使用者,建議您只在 使用者將無法存取密碼不符合政策的使用者。 請改用通知模式,讓使用者以目前的密碼登入,並告知他們密碼不符合哪些規定。

建議:啟用電子郵件列舉防護功能

部分 Firebase Authentication 方法會將電子郵件地址做為參數擲回 特定錯誤 (在必須註冊該電子郵件地址時取消註冊) (例如,使用電子郵件地址和密碼登入時) ,哪些情況不能使用 (例如變更使用者的電子郵件地址)。 雖然這麼做有助於向使用者建議具體的解決方法, 以免不肖人士濫用,以找出您註冊的電子郵件地址 使用者。

為降低這個風險,建議您啟用電子郵件列舉防護功能 為專案使用 Google Cloud gcloud 工具請注意,啟用這個 功能會變更 Firebase Authentication 的錯誤回報行為,請確認您的應用程式 而不是仰賴更具體的錯誤

後續步驟

使用者首次登入後,系統會建立新使用者帳戶,並連結至使用者登入時所用的憑證 (即使用者名稱和密碼、電話號碼或驗證服務提供者資訊)。這項新功能 帳戶儲存為 Firebase 專案的一部分,可用來識別 使用者登入專案中的所有應用程式

  • 在應用程式中,您可以從 User 物件取得使用者的個人資料基本資訊。請參閱「管理使用者」。

  • Firebase Realtime DatabaseCloud Storage 安全性規則中,您可以從 auth 變數取得已登入使用者的專屬使用者 ID,並利用該 ID 控管使用者可存取的資料。

您可以將驗證服務供應商憑證連結至現有使用者帳戶,讓使用者使用多個驗證服務供應商登入應用程式。

如要讓使用者登出,請呼叫 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;
}

您可能還想為各種驗證錯誤新增錯誤處理程式碼。請參閱處理錯誤