C++ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдкрд╛рд╕рд╡рд░реНрдб рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЦрд╛рддреЛрдВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ Firebase рд╕реЗ рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ

Firebase Authentication рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдирдХреЗ рдИрдореЗрд▓ рдкрддреЛрдВ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ Firebase рд╕реЗ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИ. рд╕рд╛рде рд╣реА, рдЕрдкрдиреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкрд╛рд╕рд╡рд░реНрдб рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЦрд╛рддреЛрдВ рдХреЛ рдореИрдиреЗрдЬ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.

рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ

  1. рдЕрдкрдиреЗ C++ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ Firebase рдЬреЛрдбрд╝реЗрдВ.
  2. рдЕрдЧрд░ рдЖрдкрдиреЗ рдЕрдм рддрдХ рдЕрдкрдиреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ Firebase рдХрдВрд╕реЛрд▓ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ.
  3. рдИрдореЗрд▓/рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗ рд╕рд╛рдЗрди-рдЗрди рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдЪрд╛рд▓реВ рдХрд░реЗрдВ:
    1. Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ, Auth рд╕реЗрдХреНрд╢рди рдЦреЛрд▓реЗрдВ.
    2. рд╕рд╛рдЗрди рдЗрди рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЯреИрдм рдкрд░, рдИрдореЗрд▓/рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗ рд╕рд╛рдЗрди-рдЗрди рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЪрд╛рд▓реВ рдХрд░реЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рд╕реЗрд╡ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.

firebase::auth::Auth рдХреНрд▓рд╛рд╕ рдХреЛ рдРрдХреНрд╕реЗрд╕ рдХрд░рдирд╛

Auth рдХреНрд▓рд╛рд╕, рд╕рднреА рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдЧреЗрдЯрд╡реЗ рд╣реИ.
  1. Auth рдФрд░ App рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЬреЛрдбрд╝реЗрдВ:
    #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 рдХреНрд▓рд╛рд╕ рдкрд╛рдПрдВ. App рдФрд░ Auth рдХреЗ рдмреАрдЪ рд╡рди-рдЯреВ-рд╡рди рдореИрдкрд┐рдВрдЧ рд╣реЛрддреА рд╣реИ.
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);

рдкрд╛рд╕рд╡рд░реНрдб рд╡рд╛рд▓рд╛ рдЦрд╛рддрд╛ рдмрдирд╛рдирд╛

рдкрд╛рд╕рд╡рд░реНрдб рдХреА рдорджрдж рд╕реЗ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦрд╛рддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рдЗрди-рдЗрди рдХреЛрдб рдореЗрдВ рдпрд╣ рддрд░реАрдХрд╛ рдЕрдкрдирд╛рдПрдВ:

  1. рдЬрдм рдХреЛрдИ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдЖрдкрдХреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рдЗрди-рдЕрдк рдлрд╝реЙрд░реНрдо рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рд╕рд╛рдЗрди рдЕрдк рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЦрд╛рддреЗ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реЗ рд╕рднреА рдирдП рдЪрд░рдг рдкреВрд░реЗ рдХрд░реЗрдВ рдЬрд┐рдирдХреА рдЖрдкрдХреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЬрд╝рд░реВрд░рдд рд╣реИ. рдЬреИрд╕реЗ, рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХрд░рдирд╛ рдХрд┐ рдирдП рдЦрд╛рддреЗ рдХрд╛ рдкрд╛рд╕рд╡рд░реНрдб рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╡рд╣ рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗ рдЬреБрдбрд╝реА рдЖрдкрдХреА рдЬрд╝рд░реВрд░реА рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ.
  2. рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдИрдореЗрд▓ рдкрддрд╛ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб Auth::CreateUserWithEmailAndPassword рдХреЛ рднреЗрдЬрдХрд░, рдирдпрд╛ рдЦрд╛рддрд╛ рдмрдирд╛рдПрдВ:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->CreateUserWithEmailAndPassword(email, password);
  3. рдЕрдЧрд░ рдЖрдкрдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдЕрдкрдбреЗрдЯ рд▓реВрдк рд╣реИ, рдЬреЛ рдирд┐рдпрдорд┐рдд рддреМрд░ рдкрд░ рдЪрд▓рддрд╛ рд╣реИ (рдЬреИрд╕реЗ, рд╣рд░ рд╕реЗрдХрдВрдб рдореЗрдВ 30 рдпрд╛ 60 рдмрд╛рд░), рддреЛ Auth::CreateUserWithEmailAndPasswordLastResult рдХреА рдорджрдж рд╕реЗ, рд╣рд░ рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рдж рдирддреАрдЬреЗ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->CreateUserWithEmailAndPasswordLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        const 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());
      }
    }
    рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЗрд╡реЗрдВрдЯ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рддреЛ Future рдкрд░ рдХреЙрд▓рдмреИрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ.

рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдИрдореЗрд▓ рдкрддреЗ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреА рдорджрдж рд╕реЗ рд╕рд╛рдЗрди рдЗрди рдХрд░рдирд╛

рдкрд╛рд╕рд╡рд░реНрдб рдХреА рдорджрдж рд╕реЗ рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рдЗрди рдЗрди рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛, рдирдпрд╛ рдЦрд╛рддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдЬреИрд╕рд╛ рд╣реА рд╣реЛрддрд╛ рд╣реИ. рдЕрдкрдиреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рдЗрди-рдЗрди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рдпрд╣ рддрд░реАрдХрд╛ рдЕрдкрдирд╛рдПрдВ:

  1. рдЬрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдкрдХреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рд╛рдЗрди рдЗрди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдИрдореЗрд▓ рдкрддрд╛ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб firebase::auth::Auth::SignInWithEmailAndPassword рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВ:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInWithEmailAndPassword(email, password);
  2. рдЕрдЧрд░ рдЖрдкрдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдЕрдкрдбреЗрдЯ рд▓реВрдк рд╣реИ, рдЬреЛ рдирд┐рдпрдорд┐рдд рддреМрд░ рдкрд░ рдЪрд▓рддрд╛ рд╣реИ (рдЬреИрд╕реЗ, рд╣рд░ рд╕реЗрдХрдВрдб рдореЗрдВ 30 рдпрд╛ 60 рдмрд╛рд░), рддреЛ Auth::SignInWithEmailAndPasswordLastResult рдХреА рдорджрдж рд╕реЗ, рд╣рд░ рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рдж рдирддреАрдЬреЗ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInWithEmailAndPasswordLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        const firebase::auth::AuthResult auth_result = *result.result();
        printf("Sign in succeeded for email %s\n",
               auth_result.user.email().c_str());
      } else {
        printf("Sign in failed with error '%s'\n", result.error_message());
      }
    }
    рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЗрд╡реЗрдВрдЯ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рддреЛ Future рдкрд░ рдХреЙрд▓рдмреИрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ.

Future рдкрд░ рдХреЙрд▓рдмреИрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдирд╛

рдХреБрдЫ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдРрд╕реЗ Update рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рд░ рд╕реЗрдХрдВрдб рдореЗрдВ 30 рдпрд╛ 60 рдмрд╛рд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдИ рдЧреЗрдо рдЗрд╕ рдореЙрдбрд▓ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВ. рдпреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо, рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЙрд▓ рдХреЛ рдкреЛрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП LastResult рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЗрд╡реЗрдВрдЯ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ рдЪрд╛рд╣рд┐рдП. Future рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░, рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ.
void OnCreateCallback(const firebase::Future<firebase::auth::User*>& result,
                      void* user_data) {
  // The callback is called when the Future enters the `complete` state.
  assert(result.status() == firebase::kFutureStatusComplete);

  // Use `user_data` to pass-in program context, if you like.
  MyProgramContext* program_context = static_cast<MyProgramContext*>(user_data);

  // Important to handle both success and failure situations.
  if (result.error() == firebase::auth::kAuthErrorNone) {
    firebase::auth::User* user = *result.result();
    printf("Create user succeeded for email %s\n", user->email().c_str());

    // Perform other actions on User, if you like.
    firebase::auth::User::UserProfile profile;
    profile.display_name = program_context->display_name;
    user->UpdateUserProfile(profile);

  } else {
    printf("Created user failed with error '%s'\n", result.error_message());
  }
}

void CreateUser(firebase::auth::Auth* auth) {
  // Callbacks work the same for any firebase::Future.
  firebase::Future<firebase::auth::AuthResult> result =
      auth->CreateUserWithEmailAndPasswordLastResult();

  // `&my_program_context` is passed verbatim to OnCreateCallback().
  result.OnCompletion(OnCreateCallback, &my_program_context);
}
рдЕрдЧрд░ рдЖрдкрдХреЛ рдкрд╕рдВрдж рд╣реИ, рддреЛ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓реИрдореНрдмреНрдбрд╛ рднреА рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.
void CreateUserUsingLambda(firebase::auth::Auth* auth) {
  // Callbacks work the same for any firebase::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::User*>& 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);
}

рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛: рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗ рдЬреБрдбрд╝реА рдиреАрддрд┐ рд╕реЗрдЯ рдХрд░рдирд╛

рдкрд╛рд╕рд╡рд░реНрдб рдХреА рдЬрдЯрд┐рд▓рддрд╛ рд╕реЗ рдЬреБрдбрд╝реА рдЬрд╝рд░реВрд░реА рд╢рд░реНрддреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ, рдЦрд╛рддреЗ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.

рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рдХреА рдиреАрддрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Firebase рдХрдВрд╕реЛрд▓ рдХреЗ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рд╡рд╛рд▓реЗ рдкреЗрдЬ рдкрд░ рдореМрдЬреВрдж, рдкрд╛рд╕рд╡рд░реНрдб рдХреА рдиреАрддрд┐ рдЯреИрдм рдЦреЛрд▓реЗрдВ:

рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреА рд╕реЗрдЯрд┐рдВрдЧ

Firebase Authentication рдХреА рдкрд╛рд╕рд╡рд░реНрдб рдиреАрддрд┐рдпрд╛рдВ, рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗ рдЬреБрдбрд╝реА рдЗрди рдЬрд╝рд░реВрд░реА рд╢рд░реНрддреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ:

  • рдЫреЛрдЯрд╛ рдЕрдХреНрд╖рд░ рд╣реЛрдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ

  • рдХреИрдкрд┐рдЯрд▓ рд▓реЗрдЯрд░ рдЬрд╝рд░реВрд░реА рд╣реИ

  • рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рд▓рд╛ рд╡рд░реНрдг рдбрд╛рд▓рдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ

  • рдмрд┐рдирд╛ рдЕрдХреНрд╖рд░ рдФрд░ рдЕрдВрдХ рд╡рд╛рд▓рд╛ рд╡рд░реНрдг рдЬрд╝рд░реВрд░реА рд╣реИ

    рдмрд┐рдирд╛ рдЕрдХреНрд╖рд░ рдФрд░ рдЕрдВрдХ рд╡рд╛рд▓реЗ рд╡рд░реНрдг рдХреА рдЬрд╝рд░реВрд░реА рд╢рд░реНрддреЗрдВ рдкреВрд░реА рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдг рдпреЗ рд╣реИрдВ: ^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~

  • рдкрд╛рд╕рд╡рд░реНрдб рдХреА рдХрдо рд╕реЗ рдХрдо рд▓рдВрдмрд╛рдИ (6 рд╕реЗ 30 рд╡рд░реНрдгреЛрдВ рдХреЗ рдмреАрдЪ; рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 6)

  • рдкрд╛рд╕рд╡рд░реНрдб рдХреА рдЬрд╝реНрдпрд╛рджрд╛ рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рд▓рдВрдмрд╛рдИ (рдЬрд╝реНрдпрд╛рджрд╛ рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ 4,096 рд╡рд░реНрдг)

рдкрд╛рд╕рд╡рд░реНрдб рдиреАрддрд┐ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рджреЛ рдореЛрдб рдореЗрдВ рдЪрд╛рд▓реВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  • рдЬрд╝рд░реВрд░реА рд╣реИ: рдЬрдм рддрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдкрдХреА рдиреАрддрд┐ рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдкрд╛рд╕рд╡рд░реНрдб рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛, рддрдм рддрдХ рд╕рд╛рдЗрди рдЕрдк рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢реЗрдВ рдкреВрд░реА рдирд╣реАрдВ рд╣реЛрдВрдЧреА.

  • рд╕реВрдЪрдирд╛ рджреЗрдВ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдРрд╕реЗ рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗ рд╕рд╛рдЗрди рдЕрдк рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ рдЬреЛ рдЬрд╝рд░реВрд░реА рд╢рд░реНрддреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛. рдЗрд╕ рдореЛрдб рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдкрд╛рд╕рд╡рд░реНрдб, рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдкрд░ рдореМрдЬреВрдж рдиреАрддрд┐ рдХреЗ рдореБрддрд╛рдмрд┐рдХ рд╣реИ рдпрд╛ рдирд╣реАрдВ. рдЕрдЧрд░ рдкрд╛рд╕рд╡рд░реНрдб рдиреАрддрд┐ рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдкрд╛рд╕рд╡рд░реНрдб рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ.

рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╣рдореЗрд╢рд╛ рдРрд╕рд╛ рдкрд╛рд╕рд╡рд░реНрдб рдЪреБрдирдирд╛ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреА рдиреАрддрд┐ рдХреЗ рдореБрддрд╛рдмрд┐рдХ рд╣реЛ.

рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдХреНрд░рд┐рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рд╕рд╛рдЗрди рдЗрди рдХрд░рдиреЗ рдкрд░ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдЪрд╛рд▓реВ рди рдХрд░реЗрдВ. рдРрд╕рд╛ рддрдм рддрдХ рди рдХрд░реЗрдВ, рдЬрдм рддрдХ рдЖрдкрдХреЛ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдРрдХреНрд╕реЗрд╕ рдмреНрд▓реЙрдХ рди рдХрд░рдирд╛ рд╣реЛ рдЬрд┐рдирдХреЗ рдкрд╛рд╕рд╡рд░реНрдб рдЖрдкрдХреА рдиреАрддрд┐ рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдирд╣реАрдВ рд╣реИрдВ. рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╕реВрдЪрдирд╛ рдореЛрдб рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ. рдЗрд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рдореМрдЬреВрджрд╛ рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗ рд╕рд╛рдЗрди рдЗрди рдХрд░ рдкрд╛рдПрдВрдЧреЗ. рд╕рд╛рде рд╣реА, рдЙрдиреНрд╣реЗрдВ рдпрд╣ рднреА рдкрддрд╛ рдЪрд▓ рдкрд╛рдПрдЧрд╛ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕рд╡рд░реНрдб рдореЗрдВ рдХреМрдирд╕реА рдЬрд╝рд░реВрд░реА рд╢рд░реНрддреЗрдВ рдкреВрд░реА рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИрдВ.

рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛: рдИрдореЗрд▓ рдкрддреЗ рдХреА рдЧрд┐рдирддреА рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдЪрд╛рд▓реВ рдХрд░реЗрдВ

Firebase Authentication рдХреЗ рдХреБрдЫ рдРрд╕реЗ рддрд░реАрдХреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдИрдореЗрд▓ рдкрддреЛрдВ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рддреМрд░ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рдЕрдЧрд░ рдИрдореЗрд▓ рдкрддрд╛ рд░рдЬрд┐рд╕реНрдЯрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЙрд╕реЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдИрдореЗрд▓ рдкрддреЗ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗ рд╕рд╛рдЗрди рдЗрди рдХрд░рддреЗ рд╕рдордп), рддреЛ рдпреЗ рддрд░реАрдХреЗ рдЦрд╛рд╕ рдЧрдбрд╝рдмрдбрд╝рд┐рдпрд╛рдВ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ. рдЗрд╕реА рддрд░рд╣, рдЕрдЧрд░ рдИрдореЗрд▓ рдкрддрд╛ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЙрд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдИрдореЗрд▓ рдкрддрд╛ рдмрджрд▓рддреЗ рд╕рдордп), рддреЛ рдпреЗ рддрд░реАрдХреЗ рдЦрд╛рд╕ рдЧрдбрд╝рдмрдбрд╝рд┐рдпрд╛рдВ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ. рдЗрд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕реБрдЭрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХрд╛ рдЧрд▓рдд рдЗрд╕реНрддреЗрдорд╛рд▓ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЬреИрд╕реЗ, рдмреИрдб рдРрдХреНрдЯрд░ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд┐рдП рдЧрдП рдИрдореЗрд▓ рдкрддреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ.

рдЗрд╕ рдЬреЛрдЦрд┐рдо рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ Google Cloud gcloud рдЯреВрд▓ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдИрдореЗрд▓ рдкрддрд╛ рдвреВрдВрдврдиреЗ рд╕реЗ рдЬреБрдбрд╝реА рд╕реБрд░рдХреНрд╖рд╛ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдЪрд╛рд▓реВ рдХрд░реЗрдВ. рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рд╕реЗ, Firebase Authentication рдХреА рдЧрдбрд╝рдмрдбрд╝реА рдХреА рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛрддрд╛ рд╣реИ: рдкрдХреНрдХрд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХрд╛ рдРрдкреНрд▓рд┐рдХреЗрд╢рди, рдЬрд╝реНрдпрд╛рджрд╛ рдЦрд╛рд╕ рдЧрдбрд╝рдмрдбрд╝рд┐рдпреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рди рд╣реЛ.

рдЕрдЧрд▓реЗ рдЪрд░рдг

рдЬрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рд▓реА рдмрд╛рд░ рд╕рд╛рдЗрди рдЗрди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦрд╛рддрд╛ рдмрдирддрд╛ рд╣реИ. рдпрд╣ рдЦрд╛рддрд╛, рдЙрди рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рд╕реЗ рд▓рд┐рдВрдХ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рдирдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рд╕рд╛рдЗрди рдЗрди рдХрд┐рдпрд╛ рд╣реИ. рдЬреИрд╕реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб, рдлрд╝реЛрди рдирдВрдмрд░ рдпрд╛ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрдВрдкрдиреА рдХреА рдЬрд╛рдирдХрд╛рд░реА. рдпрд╣ рдирдпрд╛ рдЦрд╛рддрд╛, рдЖрдкрдХреЗ Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рддреМрд░ рдкрд░ рд╕реЗрд╡ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓, рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╣рд░ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд╝рд░реНрдХрд╝ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╕рд╛рдЗрди рдЗрди рдХрд┐рдпрд╛ рд╣реИ.

  • рдЕрдкрдиреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, firebase::auth::User рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ:

    firebase::auth::User user = auth->current_user();
    if (user.is_valid()) {
      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 Realtime Database рдФрд░ Cloud Storage рд╕реБрд░рдХреНрд╖рд╛ рдирд┐рдпрдореЛрдВ рдореЗрдВ, auth рд╡реИрд░рд┐рдПрдмрд▓ рд╕реЗ рд╕рд╛рдЗрди рдЗрди рдХрд┐рдП рд╣реБрдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдпреВрдиреАрдХ User-ID рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рд╕рд╛рде рд╣реА, рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдпрд╣ рдХрдВрдЯреНрд░реЛрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕ рдбреЗрдЯрд╛ рдХреЛ рдРрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ.

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдЖрдкрдХреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рд╛рдЗрди рдЗрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИ. рдЗрд╕рдХреЗ рд▓рд┐рдП, рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдХреЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХреЛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦрд╛рддреЗ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ.

рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рд╛рдЗрди рдЖрдЙрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, SignOut() рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ:

auth->SignOut();