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

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

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

Trước khi bạn có thể sử dụng Firebase Authentication! 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, có nghĩa là dự án đó đã được đăng ký và được định cấu hình cho Firebase.

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

Lưu ý rằng việc thêm Firebase vào dự án C++ bao gồm các tác vụ trong cả Bảng điều khiển Firebase và trong dự án C++ đang mở của bạn (ví dụ: bạn tải xuống Tệp cấu hình Firebase 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. 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 chúng đế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 Tương lai CreateUserWithEmailAndPasswordLastResult hoặc nếu bạn đang viết một trò chơi hoặc ứng dụng có vòng lặp cập nhật định kỳ nào đó, 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ư sau trong ví dụ vòng lặp cập nhật:

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 của họ và mật khẩu. 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 một trình nghe vào lệnh gọi chung đối tượng xác thực. Trình nghe này được gọi mỗi khi người dùng đăng nhập các thay đổi về trạng thái. Vì trình nghe chỉ chạy sau khi đối tượng xác thực được được khởi chạy hoàn toàn và sau khi bất kỳ lệnh gọi mạng nào hoàn tất, tốt nhất là để 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 firebase::auth::AuthStateListener lớp trừu tượng. 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 với đối tượng firebase::auth::Auth Phương thức AddAuthStateListener:

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 và khách ẩn danh khác tài khoản: