Bắt đầu xác thực Firebase trong C++

Bạn có thể sử dụng tính năng Xác thực Firebase để cho phép người dùng đăng nhập vào ứng dụng của bạn bằng một hoặc nhiều phương thức đăng nhập, trong đó có địa chỉ email và đăng nhập bằng mật khẩu cũng như các nhà cung cấp danh tính được liên kết như Đăng nhập bằng Google và Đăng nhập bằng Facebook. Hướng dẫn này giúp bạn bắt đầu tính năng Xác thực Firebase bằng cách thêm thông tin đăng nhập bằng địa chỉ email và mật khẩu vào ứng dụng.

Kết nối dự án C++ với Firebase

Trước khi có thể sử dụng tính năng Xác thực Firebase, bạn cần:

  • Đăng ký dự án C++ của bạn và định cấu hình dự án đó để sử dụng Firebase.

    Nếu dự án C++ của bạn đã sử dụng Firebase, thì tức là dự án đó đã được đăng ký và định cấu hình cho Firebase.

  • Thêm SDK C++ của Firebase vào dự án C++.

Lưu ý rằng việc thêm Firebase vào dự án C++ sẽ liên quan đến các tác vụ trong cả bảng điều khiển của Firebase và trong dự án C++ đang mở (ví dụ: bạn tải các tệp cấu hình Firebase xuống từ bảng điều khiển, sau đó di chuyển các tệp đó vào dự án C++).

Đăng ký người dùng mới

Tạo biểu mẫu cho phép người dùng mới đăng ký ứng dụng của bạn bằng địa chỉ email và mật khẩu của họ. Khi người dùng hoàn tất biểu mẫu, hãy xác thực địa chỉ email và mật khẩu do người dùng cung cấp, sau đó chuyển các thông tin đó đến phương thức CreateUserWithEmailAndPassword:

firebase::Future<firebase::auth::AuthResult> result =
    auth->CreateUserWithEmailAndPassword(email, password);

Bạn có thể kiểm tra trạng thái của hoạt động tạo tài khoản bằng cách đăng ký lệnh gọi lại trên đối tượng Future CreateUserWithEmailAndPasswordLastResult hoặc nếu bạn đang viết trò chơi hoặc ứng dụng có một số loại vòng lặp cập nhật định kỳ, bằng cách thăm dò trạng thái trong vòng lặp cập nhật.

Ví dụ: sử dụng thuộc tính Future:

firebase::Future<firebase::auth::AuthResult> result =
    auth->CreateUserWithEmailAndPasswordLastResult();

// The lambda has the same signature as the callback function.
result.OnCompletion(
    [](const firebase::Future<firebase::auth::AuthResult>& result,
       void* user_data) {
      // `user_data` is the same as &my_program_context, below.
      // Note that we can't capture this value in the [] because std::function
      // is not supported by our minimum compiler spec (which is pre C++11).
      MyProgramContext* program_context =
          static_cast<MyProgramContext*>(user_data);

      // Process create user result...
      (void)program_context;
    },
    &my_program_context);

Hoặc để sử dụng tính năng thăm dò ý kiến, hãy làm như ví dụ sau trong vòng lặp cập nhật của trò chơi:

firebase::Future<firebase::auth::AuthResult> result =
    auth->CreateUserWithEmailAndPasswordLastResult();
if (result.status() == firebase::kFutureStatusComplete) {
  if (result.error() == firebase::auth::kAuthErrorNone) {
    firebase::auth::AuthResult* auth_result = *result.result();
    printf("Create user succeeded for email %s\n", auth_result.user.email().c_str());
  } else {
    printf("Created user failed with error '%s'\n", result.error_message());
  }
}

Đăng nhập người dùng hiện có

Tạo biểu mẫu cho phép người dùng hiện tại đăng nhập bằng địa chỉ email và mật khẩu của họ. Khi người dùng hoàn tất biểu mẫu, hãy gọi phương thức SignInWithEmailAndPassword:

firebase::Future<firebase::auth::AuthResult> result =
    auth->SignInWithEmailAndPassword(email, password);

Xem kết quả đăng nhập giống như cách bạn nhận kết quả đăng ký.

Thiết lập trình nghe trạng thái xác thực và lấy dữ liệu tài khoản

Để phản hồi các sự kiện đăng nhập và đăng xuất, hãy đính kèm trình nghe vào đối tượng xác thực chung. Trình nghe này được gọi bất cứ khi nào trạng thái đăng nhập của người dùng thay đổi. Vì trình nghe chỉ chạy sau khi đối tượng xác thực được khởi chạy hoàn toàn và sau khi mọi lệnh gọi mạng hoàn tất, nên đây là nơi tốt nhất để nhận thông tin về người dùng đã đăng nhập.

Tạo trình nghe bằng cách triển khai lớp trừu tượng firebase::auth::AuthStateListener. Ví dụ: để tạo một trình nghe nhận thông tin về người dùng khi người dùng đăng nhập thành công:

class MyAuthStateListener : public firebase::auth::AuthStateListener {
 public:
  void OnAuthStateChanged(firebase::auth::Auth* auth) override {
    firebase::auth::User user = auth.current_user();
    if (user.is_valid()) {
      // User is signed in
      printf("OnAuthStateChanged: signed_in %s\n", user.uid().c_str());
      const std::string displayName = user.DisplayName();
      const std::string emailAddress = user.Email();
      const std::string photoUrl = user.PhotoUrl();
    } else {
      // User is signed out
      printf("OnAuthStateChanged: signed_out\n");
    }
    // ...
  }
};

Đính kèm trình nghe bằng phương thức AddAuthStateListener của đối tượng firebase::auth::Auth:

MyAuthStateListener state_change_listener;
auth->AddAuthStateListener(&state_change_listener);

Các bước tiếp theo

Tìm hiểu cách thêm tính năng hỗ trợ cho các nhà cung cấp danh tính khác và tài khoản khách ẩn danh: