Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Xác thực với Firebase bằng Hệ thống xác thực tùy chỉnh và C ++

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

Trước khi bắt đầu

  1. Thêm căn cứ hỏa lực để dự án của bạn C ++ .
  2. Nhận các khóa máy chủ của dự án của bạn:
    1. Tới các tài khoản dịch vụ trang trong cài đặt của dự án của bạn.
    2. Nhấn Generate New Private Key ở dưới cùng của phần căn cứ hỏa lực SDK quản trị của trang tài khoản dịch vụ.
    3. Cặp khóa công khai / riêng tư của tài khoản dịch vụ mới được tự động 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

Các Auth lớp là cửa ngõ cho tất cả các cuộc gọi API.
  1. Thêm các tập tin tiêu đề Auth và App:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. Trong mã khởi tạo của bạn, tạo ra một firebase::App lớp.
    #if defined(__ANDROID__)
      firebase::App* app =
          firebase::App::Create(firebase::AppOptions(), my_jni_env, my_activity);
    #else
      firebase::App* app = firebase::App::Create(firebase::AppOptions());
    #endif  // defined(__ANDROID__)
    
  3. Có được các firebase::auth::Auth lớp cho bạn firebase::App . Có một ánh xạ một-một giữa AppAuth .
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    
Gọi Auth::SignInWithCustomToken với thẻ từ máy chủ xác thực của bạn.
  1. 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 của họ) đến máy chủ xác thực của bạn. Kiểm tra máy chủ của bạn các thông tin và trả về một tùy chỉnh thẻ nếu họ là hợp lệ.
  2. Sau khi bạn nhận được tùy chỉnh token từ máy chủ xác thực, vượt qua nó để Auth::SignInWithCustomToken để đăng nhập người dùng:
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithCustomToken(custom_token);
    
  3. Nếu chương trình của bạn có chu kỳ cập nhật mà chạy thường xuyên (nói ở tốc độ 30 hoặc 60 lần mỗi giây), bạn có thể kiểm tra kết quả một lần mỗi bản cập nhật với Auth::SignInWithCustomTokenLastResult :
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithCustomTokenLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        firebase::auth::User* user = *result.result();
        printf("Sign in succeeded for `%s`\n", user->display_name().c_str());
      } else {
        printf("Sign in failed with error '%s'\n", result.error_message());
      }
    }
    
    Hoặc, nếu chương trình của bạn là sự kiện điều khiển, bạn có thể thích để đăng ký một callback về tương lai .

Bước tiếp theo

Sau khi người dùng đăng nhập lần đầu tiên, 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 — nghĩa là tên người dùng và mật khẩu, số điện thoại hoặc thông tin nhà cung cấp xác thực — người dùng đã đăng nhập bằng. Tài khoản mới này được lưu trữ như một phần của dự án Firebase của bạn và có thể được sử 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 của bạn, bạn có thể nhận được thông tin hồ sơ cơ bản của người dùng từ các firebase::auth::User đối tượng:

    firebase::auth::User* user = auth->current_user();
    if (user != nullptr) {
      std::string name = user->display_name();
      std::string email = user->email();
      std::string photo_url = user->photo_url();
      // The user's ID, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server,
      // if you have one. Use firebase::auth::User::Token() instead.
      std::string uid = user->uid();
    }
    
  • Trong Cơ sở dữ liệu căn cứ hỏa lực Realtime của bạn và lưu trữ đám mây Security Rules , bạn có thể nhận được đã đăng nhập của người sử dụng ID người dùng duy nhất từ auth biến, và sử dụng nó để kiểm soát dữ liệu 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 bạn sử dụng nhiều nhà cung cấp chứng thực bởi liên kết auth thông tin cung cấp cho một tài khoản người dùng hiện có.

Đăng xuất khỏi một người sử dụng, hãy gọi SignOut() :

auth->SignOut();