Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기

사용자 지정 인증 시스템 및 C++를 사용하여 Firebase로 인증

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
사용자가 성공적으로 로그인할 때 사용자 정의 서명 토큰을 생성하도록 인증 서버를 수정하여 Firebase 인증을 사용자 정의 인증 시스템과 통합할 수 있습니다. 앱은 이 토큰을 수신하고 Firebase에 인증하는 데 사용합니다.

시작하기 전에

  1. C++ 프로젝트에 Firebase를 추가합니다 .
  2. 프로젝트의 서버 키를 가져옵니다.
    1. 프로젝트 설정에서 서비스 계정 페이지로 이동합니다.
    2. 서비스 계정 페이지의 Firebase Admin SDK 섹션 하단에서 새 개인 키 생성 을 클릭합니다.
    3. 새 서비스 계정의 공개/개인 키 쌍이 자동으로 컴퓨터에 저장됩니다. 이 파일을 인증 서버에 복사하십시오.

Firebase로 인증

Auth 클래스는 모든 API 호출의 게이트웨이입니다.
  1. 인증 및 앱 헤더 파일 추가:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. 초기화 코드에서 firebase::App 클래스를 만듭니다.
    #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. firebase::App 에 대한 firebase::auth::Auth 클래스를 가져옵니다. AppAuth 간에 일대일 매핑이 있습니다.
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    
인증 서버의 토큰으로 Auth::SignInWithCustomToken 을 호출합니다.
  1. 사용자가 앱에 로그인할 때 로그인 자격 증명(예: 사용자 이름 및 비밀번호)을 인증 서버로 보냅니다. 서버는 자격 증명을 확인하고 유효한 경우 사용자 지정 토큰 을 반환합니다.
  2. 인증 서버에서 사용자 정의 토큰을 받은 후 Auth::SignInWithCustomToken 에 전달하여 사용자 로그인:
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithCustomToken(custom_token);
    
  3. 프로그램에 정기적으로 실행되는 업데이트 루프가 있는 경우(예: 초당 30회 또는 60회) 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());
      }
    }
    
    를 사용하여 업데이트당 한 번 결과를 확인할 수 있습니다. 또는 프로그램이 이벤트 기반인 경우 선호할 수 있습니다. Future 에 콜백을 등록합니다 .

다음 단계

사용자가 처음으로 로그인하면 새 사용자 계정이 생성되어 사용자가 로그인한 자격 증명(즉, 사용자 이름 및 암호, 전화 번호 또는 인증 공급자 정보)에 연결됩니다. 이 새 계정은 Firebase 프로젝트의 일부로 저장되며 사용자 로그인 방식에 관계없이 프로젝트의 모든 앱에서 사용자를 식별하는 데 사용할 수 있습니다.

  • 앱에서 firebase::auth::User 객체에서 사용자의 기본 프로필 정보를 가져올 수 있습니다.

    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();
    }
    
  • Firebase 실시간 데이터베이스 및 Cloud Storage 보안 규칙 에서 auth 변수에서 로그인한 사용자의 고유 사용자 ID를 가져와 사용자가 액세스할 수 있는 데이터를 제어하는 ​​데 사용할 수 있습니다.

인증 공급자 자격 증명을 기존 사용자 계정에 연결하여 사용자가 여러 인증 공급자를 사용하여 앱에 로그인하도록 허용할 수 있습니다.

사용자를 로그아웃하려면 SignOut() 을 호출합니다.

auth->SignOut();