Google 致力于为黑人社区推动种族平等。查看具体举措

Проверка подлинности с помощью Firebase с использованием настраиваемой системы проверки подлинности и C ++

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

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

  1. Добавить Firebase в свой проект C ++ .
  2. Получите серверные ключи вашего проекта:
    1. Перейти к Учетные записи служб страницы в настройках вашего проекта.
    2. Нажмите кнопку Создать новый секретный ключ в нижней части секции Firebase Admin SDK страницы Учетные записи служб.
    3. Пара открытого и закрытого ключей новой учетной записи службы автоматически сохраняется на вашем компьютере. Скопируйте этот файл на свой сервер аутентификации.

Аутентифицироваться с Firebase

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);
    
Вызов 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());
      }
    }
    
    Или, если ваша программа приводится событие, вы можете предпочесть чтобы зарегистрировать обратный вызов на будущее .

Следующие шаги

После того, как пользователь входит в систему в первый раз, создается новая учетная запись пользователя, связанная с учетными данными, то есть с именем пользователя и паролем, номером телефона или информацией о провайдере аутентификации, с которыми пользователь вошел в систему. Эта новая учетная запись хранится как часть вашего проекта 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();