Google стремится к продвижению расового равенства для чернокожего населения. Смотри как.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Аутентифицировать с Firebase с использованием счетов на основе паролей с использованием C ++

Вы можете использовать Firebase Authentication, чтобы позволить пользователям аутентификации Firebase с помощью адреса электронной почты и пароли, а также для управления учетными записями на основе пароля своего приложения.

Прежде чем вы начнете

  1. Добавить Firebase в свой проект C ++ .
  2. В вашем проектном уровне build.gradle файл, не забудьте включить репозиторий Maven Google, как в вашем buildscript и allprojects секций.
  3. Если вы еще не подключили приложение к вашему проекту Firebase, сделать это из консоли Firebase .
  4. Включить Email / Пароль входа в систему:
    1. В Firebase консоли откройте раздел Auth.
    2. На вкладке Вход в метод, включите Email / пароль входа в методе и нажмите кнопку Сохранить.

Доступ к firebase::auth::Auth класс

Auth класс является шлюзом для всех вызовов API.
  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::auth::Auth класс для вашего firebase::App . Существует отображение один к одному между App и Auth .
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    

Создание учетной записи на основе пароля

Чтобы создать новую учетную запись пользователя с помощью пароля, выполните следующие действия в аккаунте вашего приложения кода:

  1. Когда новый пользователь подписывает с использованием формы регистрации вашего приложения, выполните любые новые шаги проверки учетной записи, которая требует вашего приложения, например, проверив, что пароль для новой учетной записи был введен правильно и соответствует вашим требованиям сложности.
  2. Создать новую учетную запись, передавая адрес электронной почты нового пользователя и пароль для Auth::CreateUserWithEmailAndPassword :
    firebase::Future<firebase::auth::User*> result =
        auth->CreateUserWithEmailAndPassword(email, password);
    
  3. Если ваша программа имеет цикл обновления , который работает регулярно (скажем , в 30 или 60 раз в секунду), вы можете проверить результаты раз за обновление с Auth::CreateUserWithEmailAndPasswordLastResult :
    firebase::Future<firebase::auth::User*> result =
        auth->CreateUserWithEmailAndPasswordLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        firebase::auth::User* user = *result.result();
        printf("Create user succeeded for email %s\n", user->email().c_str());
      } else {
        printf("Created user failed with error '%s'\n", result.error_message());
      }
    }
    
    Или, если ваша программа приводится событие, вы можете предпочесть зарегистрировать обратный вызов на будущее .

Вход пользователя с адресом электронной почты и паролем

Шаги для подписания в пользователя с паролем аналогичны шагам для создания новой учетной записи. В вашем приложении входа в функции, выполните следующие действия:

  1. Когда пользователь в ваше приложение, передать адрес электронной почты пользователя и пароль для firebase::auth::Auth::SignInWithEmailAndPassword :
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithEmailAndPassword(email, password);
    
  2. Если ваша программа имеет цикл обновления , который работает регулярно (скажем , в 30 или 60 раз в секунду), вы можете проверить результаты раз за обновление с Auth::SignInWithEmailAndPasswordLastResult :
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithEmailAndPasswordLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        firebase::auth::User* user = *result.result();
        printf("Sign in succeeded for email %s\n", user->email().c_str());
      } else {
        printf("Sign in failed with error '%s'\n", result.error_message());
      }
    }
    
    Или, если ваша программа приводится событие, вы можете предпочесть зарегистрировать обратный вызов на будущее .

Регистрация обратного вызова на будущее

Некоторые программы имеют Update функции, которые вызываются 30 или 60 раз в секунду. Например, многие игры следуют этой модели. Эти программы могут вызывать LastResult функции опроса асинхронных вызовов. Однако, если ваша программа приводится событие, вы можете предпочесть зарегистрировать функции обратного вызова. Функция обратного вызова вызывается после завершения будущего.
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::User*> 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::User*> 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::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 переменной и использовать его , чтобы контролировать , какие данные пользователь заходит может.

Вы можете позволить пользователям входить в ваше приложение с помощью нескольких поставщиков проверки подлинности с помощью ссылки AUTH учетных данных поставщика к существующему учетной записи пользователя.

Чтобы выйти пользователь, вызовите SignOut() :

auth->SignOut();