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

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

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

  1. Добавьте Firebase в свой проект C++ .
  2. Если вы еще не подключили свое приложение к проекту Firebase, сделайте это из консоли Firebase .
  3. Включите анонимную аутентификацию:
    1. В консоли Firebase откройте раздел Auth .
    2. На странице «Способы входа» включите анонимный метод входа.
    3. Необязательно : если вы обновили свой проект до Firebase Authentication с Identity Platform , вы можете включить автоматическую очистку. Если вы включите этот параметр, анонимные учетные записи старше 30 дней будут автоматически удалены. В проектах с включенной автоматической очисткой анонимная проверка подлинности больше не будет учитываться при расчете лимитов использования или квот выставления счетов. См. Автоматическая очистка .

Аутентификация с помощью Firebase анонимно

Если пользователь, вышедший из системы, использует функцию приложения, требующую аутентификации в 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::SignInAnonymously .
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInAnonymously();
    
  • Если в вашей программе есть цикл обновления, который выполняется регулярно (скажем, 30 или 60 раз в секунду), вы можете проверять результаты один раз за обновление с помощью Auth::SignInAnonymouslyLastResult :
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInAnonymouslyLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        firebase::auth::AuthResult auth_result = *result.result();
        printf("Sign in succeeded for `%s`\n",
               auth_result.user.display_name().c_str());
      } else {
        printf("Sign in failed with error '%s'\n", result.error_message());
      }
    }
    
    Или, если ваша программа управляется событиями, вы можете предпочесть для регистрации обратного вызова на Future .
  • Преобразование анонимной учетной записи в постоянную учетную запись

    Когда анонимный пользователь регистрируется в вашем приложении, вы можете разрешить ему продолжить работу со своей новой учетной записью. Например, вы можете захотеть сделать элементы, которые пользователь добавил в свою корзину до регистрации, доступными в своей новой учетной записи. корзина аккаунта. Для этого выполните следующие шаги:

    1. Когда пользователь регистрируется, завершите процесс входа для поставщика аутентификации пользователя, включая вызов одного из методов Auth::SignInWith , но не включая его. Например, получите токен идентификатора Google пользователя, токен доступа к Facebook или адрес электронной почты и пароль.
    2. Получите auth::Credential для нового поставщика аутентификации:

      Вход в Google
      firebase::auth::Credential credential =
          firebase::auth::GoogleAuthProvider::GetCredential(google_id_token,
                                                            nullptr);
      
      Вход в Facebook
      firebase::auth::Credential credential =
          firebase::auth::FacebookAuthProvider::GetCredential(access_token);
      
      Вход по электронной почте и паролю
      firebase::auth::Credential credential =
          firebase::auth::EmailAuthProvider::GetCredential(email, password);
      
    3. Передайте объект auth::Credential методу LinkWithCredential пользователя, выполнившего вход:

      // Link the new credential to the currently active user.
      firebase::auth::User current_user = auth->current_user();
      firebase::Future<firebase::auth::AuthResult> result =
          current_user.LinkWithCredential(credential);
      

    Если вызов LinkWithCredential удался, новая учетная запись пользователя сможет получить доступ к данным Firebase анонимной учетной записи.

    Автоматическая очистка

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

    • Любые анонимные учетные записи, созданные после включения автоматической очистки, могут быть автоматически удалены в любое время через 30 дней после создания.
    • Существующие анонимные учетные записи будут иметь право на автоматическое удаление через 30 дней после включения автоматической очистки.
    • Если вы отключите автоматическую очистку, все анонимные учетные записи, запланированные к удалению, останутся запланированными к удалению.
    • Если вы «обновите» анонимную учетную запись, связав ее с любым методом входа, учетная запись не будет автоматически удалена.

    Если вы хотите узнать, сколько пользователей будет затронуто, прежде чем вы включите эту функцию, и вы обновили свой проект до Firebase Authentication с Identity Platform , вы можете фильтровать по is_anon в Cloud Logging .

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

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