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

Bạn có thể dùng Firebase Authentication để 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, bao gồm cả phương thức đăng nhập bằng địa chỉ email và mật khẩu, cũng như các nhà cung cấp danh tính 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 với Firebase Authentication bằng cách hướng dẫn cách thêm tính năng đă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

Để có thể sử dụng Firebase Authentication, bạn cần phải:

  • Đăng ký dự án C++ 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ì dự án đó đã được đăng ký và định cấu hình cho Firebase.

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

Xin lưu ý rằng việc thêm Firebase vào dự án C++ của bạn bao gồm các thao tác cả trong bảng điều khiển Firebase và trong dự án C++ đang mở (ví dụ: bạn tải 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 một biểu mẫu cho phép người dùng mới đăng ký 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ày đế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 thao tác tạo tài khoản bằng cách đăng ký một lệnh gọi lại trên đối tượng CreateUserWithEmailAndPasswordLastResult Future hoặc, nếu đang viết mộ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 một 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 theo 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 tại

Tạo một 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);

Nhận kết quả của thao tác đăng nhập theo cách tương tự như cách bạn nhận kết quả đăng ký.

Đặt trình nghe trạng thái xác thực và nhận 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 một 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 tạo 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 để lấy 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 chế độ hỗ trợ cho các nhà cung cấp dịch vụ danh tính khác và tài khoản khách ẩn danh: