Xác thực bằng Firebase trên nền tảng của Apple bằng hệ thống xác thực tuỳ chỉnh

Bạn có thể tích hợp tính năng Xác thực Firebase với một hệ thống xác thực tuỳ chỉnh bằng cách sửa đổi máy chủ xác thực để tạo mã thông báo đã ký tuỳ chỉnh khi người dùng đăng nhập thành công. Ứng dụng sẽ nhận được mã thông báo này và sử dụng mã đó để xác thực với Firebase.

Trước khi bắt đầu

  1. Tạo một dự án Firebase và đăng ký ứng dụng của bạn nếu bạn chưa đăng ký.
  2. Sử dụng Trình quản lý gói Swift để cài đặt và quản lý các phần phụ thuộc Firebase.

    1. Trong Xcode, khi dự án ứng dụng của bạn đang mở, hãy chuyển đến File > Add Packages (Tệp > Thêm gói).
    2. Khi được nhắc, hãy thêm kho lưu trữ SDK nền tảng Apple của Firebase:
    3.   https://github.com/firebase/firebase-ios-sdk.git
    4. Chọn thư viện Xác thực Firebase.
    5. Thêm cờ -ObjC vào mục Cờ trình liên kết khác trong chế độ cài đặt bản dựng của mục tiêu.
    6. Khi hoàn tất, Xcode sẽ tự động bắt đầu phân giải và tải các phần phụ thuộc của bạn xuống ở chế độ nền.
  3. Lấy khoá máy chủ của dự án:
    1. Chuyển đến trang Tài khoản dịch vụ trong phần cài đặt của dự án.
    2. Nhấp vào Generate New Private Key (Tạo khoá riêng tư mới) ở cuối mục SDK quản trị của Firebase trên trang Tài khoản dịch vụ.
    3. Cặp khoá công khai/riêng tư của tài khoản dịch vụ mới sẽ tự động được lưu trên máy tính của bạn. Sao chép tệp này vào máy chủ xác thực của bạn.

Xác thực bằng Firebase

  1. Nhập mô-đun FirebaseCore trong UIApplicationDelegate, cũng như bất kỳ mô-đun Firebase nào khác mà đại diện ứng dụng của bạn sử dụng. Ví dụ: Cách sử dụng Cloud Firestore và Xác thực:

    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. Định cấu hình một thực thể dùng chung của FirebaseApp trong phương thức application(_:didFinishLaunchingWithOptions:) của uỷ quyền ứng dụng:

    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. Nếu đang sử dụng SwiftUI, bạn phải tạo một ứng dụng uỷ quyền và đính kèm ứng dụng đó vào cấu trúc App thông qua UIApplicationDelegateAdaptor hoặc NSApplicationDelegateAdaptor. Bạn cũng phải tắt tính năng uỷ quyền ứng dụng. Để biết thêm thông tin, hãy xem hướng dẫn về 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. Khi người dùng đăng nhập vào ứng dụng của bạn, hãy gửi thông tin đăng nhập của họ (ví dụ: tên người dùng và mật khẩu) đến máy chủ xác thực. Máy chủ của bạn sẽ kiểm tra thông tin đăng nhập và trả về một mã tuỳ chỉnh nếu hợp lệ.
  5. Sau khi bạn nhận được mã thông báo tuỳ chỉnh từ máy chủ xác thực, hãy chuyển mã đó đến signInWithCustomToken để đăng nhập người dùng:

    Swift

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

    Objective-C

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

Các bước tiếp theo

Sau khi người dùng đăng nhập lần đầu tiên, một tài khoản người dùng mới sẽ được tạo và liên kết với thông tin đăng nhập (chẳng hạn như tên người dùng và mật khẩu, số điện thoại hoặc thông tin của nhà cung cấp dịch vụ xác thực) mà người dùng đã đăng nhập. Tài khoản mới này được lưu trữ như một phần trong dự án Firebase và có thể được dùng để xác định người dùng trên mọi ứng dụng trong dự án của bạn, bất kể người dùng đăng nhập bằng cách nào.

  • Trong các ứng dụng, bạn có thể lấy thông tin hồ sơ cơ bản của người dùng từ đối tượng User . Xem phần Quản lý người dùng.

  • Trong Quy tắc bảo mật của Cloud Storage và Cơ sở dữ liệu theo thời gian thực của Firebase, bạn có thể lấy mã nhận dạng người dùng riêng biệt của người dùng đã đăng nhập từ biến auth rồi sử dụng mã này để kiểm soát những dữ liệu mà người dùng có thể truy cập.

Bạn có thể cho phép người dùng đăng nhập vào ứng dụng của mình thông qua nhiều nhà cung cấp dịch vụ xác thực bằng cách liên kết thông tin đăng nhập của nhà cung cấp dịch vụ xác thực với một tài khoản người dùng hiện có.

Để đăng xuất một người dùng, hãy gọi 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;
}

Bạn cũng nên thêm mã xử lý lỗi cho toàn bộ các lỗi xác thực. Hãy xem bài viết Xử lý lỗi.