Вы можете использовать Firebase Authentication для создания и использования временных анонимных учетных записей для аутентификации в Firebase. Эти временные анонимные учетные записи можно использовать, чтобы позволить пользователям, которые еще не зарегистрировались в вашем приложении, работать с данными, защищенными правилами безопасности. Если анонимный пользователь решит зарегистрироваться в вашем приложении, вы можете связать его учетные данные для входа с анонимной учетной записью , чтобы он мог продолжать работать со своими защищенными данными в будущих сеансах.
Прежде чем начать
- Добавьте Firebase в свой проект C++ .
- Если вы еще не подключили свое приложение к проекту Firebase, сделайте это из консоли Firebase .
- Включите анонимную аутентификацию:
- В консоли Firebase откройте раздел Auth .
- На странице «Способы входа» включите анонимный метод входа.
- Необязательно : если вы обновили свой проект до Firebase Authentication with Identity Platform , вы можете включить автоматическую очистку. Если вы включите этот параметр, анонимные учетные записи старше 30 дней будут автоматически удалены. В проектах с включенной автоматической очисткой анонимная проверка подлинности больше не будет учитываться при расчете лимитов использования или квот выставления счетов. См. Автоматическая очистка .
Аутентификация с помощью Firebase анонимно
Если пользователь, вышедший из системы, использует функцию приложения, требующую аутентификации с помощью Firebase, войдите в систему анонимно, выполнив следующие шаги:
КлассAuth
является шлюзом для всех вызовов API.- Добавьте файлы заголовков Auth и App:
#include "firebase/app.h" #include "firebase/auth.h"
- В коде инициализации создайте класс
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__)
- Получите
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();
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 .
Преобразование анонимной учетной записи в постоянную учетную запись
Когда анонимный пользователь регистрируется в вашем приложении, вы можете разрешить ему продолжить работу со своей новой учетной записью. Например, вы можете захотеть сделать товары, которые пользователь добавил в свою корзину до регистрации, доступными в новой учетной записи. Корзина аккаунта. Для этого выполните следующие шаги:
- Когда пользователь регистрируется, завершите процесс входа для поставщика аутентификации пользователя, включая вызов одного из методов
Auth::SignInWith
но не включая его. Например, получите токен идентификатора Google пользователя, токен доступа к Facebook или адрес электронной почты и пароль. Получите
Вход в Googleauth::Credential
для нового поставщика аутентификации:firebase::auth::Credential credential = firebase::auth::GoogleAuthProvider::GetCredential(google_id_token, nullptr);
Вход в Facebookfirebase::auth::Credential credential = firebase::auth::FacebookAuthProvider::GetCredential(access_token);
Вход по электронной почте и паролюfirebase::auth::Credential credential = firebase::auth::EmailAuthProvider::GetCredential(email, password);
Передайте объект
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 with Identity Platform , вы можете включить автоматическую очистку в консоли Firebase . Когда вы включаете эту функцию, вы разрешаете Firebase автоматически удалять анонимные учетные записи старше 30 дней. В проектах с включенной автоматической очисткой анонимная проверка подлинности не учитывается при расчете лимитов использования или квот на выставление счетов.
- Любые анонимные учетные записи, созданные после включения автоматической очистки, могут быть автоматически удалены в любое время через 30 дней после создания.
- Существующие анонимные учетные записи будут иметь право на автоматическое удаление через 30 дней после включения автоматической очистки.
- Если вы отключите автоматическую очистку, все анонимные учетные записи, запланированные к удалению, останутся запланированными к удалению.
- Если вы «обновите» анонимную учетную запись, связав ее с любым методом входа, учетная запись не будет автоматически удалена.
Если вы хотите узнать, сколько пользователей будет затронуто, прежде чем вы включите эту функцию, и вы обновили свой проект до Firebase Authentication with Identity Platform , вы можете фильтровать по is_anon
в Cloud Logging .
Следующие шаги
Теперь, когда пользователи могут проходить аутентификацию в Firebase, вы можете контролировать их доступ к данным в вашей базе данных Firebase с помощью правил Firebase .