С помощью Firebase Authentication можно создавать и использовать временные анонимные учетные записи для аутентификации в Firebase. Эти временные анонимные учетные записи позволяют пользователям, еще не зарегистрировавшимся в вашем приложении, работать с данными, защищенными правилами безопасности. Если анонимный пользователь решит зарегистрироваться в вашем приложении, вы можете связать его учетные данные для входа с анонимной учетной записью, чтобы он мог продолжать работать со своими защищенными данными в будущих сессиях.
Прежде чем начать
Если вы еще этого не сделали, выполните действия, описанные в руководстве по началу работы .
Включить анонимный вход:
- В разделе «Аутентификация» консоли Firebase откройте страницу «Метод входа» .
- На странице выбора способа входа в систему включите анонимный вход и нажмите «Сохранить» .
Аутентификация с помощью Firebase анонимно
Когда пользователь, не вышедший из системы, использует функцию приложения, требующую аутентификации в Firebase, выполните анонимный вход пользователя, вызвав функцию signInAnonymously() :
try {
final userCredential =
await FirebaseAuth.instance.signInAnonymously();
print("Signed in with temporary account.");
} on FirebaseAuthException catch (e) {
switch (e.code) {
case "operation-not-allowed":
print("Anonymous auth hasn't been enabled for this project.");
break;
default:
print("Unknown error.");
}
}
Преобразовать анонимный аккаунт в постоянный.
Когда анонимный пользователь регистрируется в вашем приложении, вы можете разрешить ему продолжить работу с новой учетной записью — например, вы можете захотеть сделать товары, добавленные пользователем в корзину до регистрации, доступными в корзине покупок новой учетной записи. Для этого выполните следующие шаги:
После регистрации пользователя завершите процесс авторизации для его поставщика аутентификации, включая вызов одного из методов
signInWith. Например, получите токен Google ID пользователя, токен доступа Facebook или адрес электронной почты и пароль.Получите объект
Credentialдля нового поставщика аутентификации:// Google Sign-in final credential = GoogleAuthProvider.credential(idToken: idToken); // Email and password sign-in final credential = EmailAuthProvider.credential(email: emailAddress, password: password); // Etc.Передайте объект
Credentialв методlinkWithCredential()пользователя, выполнившего вход в систему:try { final userCredential = await FirebaseAuth.instance.currentUser ?.linkWithCredential(credential); } on FirebaseAuthException catch (e) { switch (e.code) { case "provider-already-linked": print("The provider has already been linked to the user."); break; case "invalid-credential": print("The provider's credential is not valid."); break; case "credential-already-in-use": print("The account corresponding to the credential already exists, " "or is already linked to a Firebase User."); break; // See the API reference for the full list of error codes. default: print("Unknown error."); } ```
Если вызов функции linkWithCredential() завершится успешно, новая учетная запись пользователя сможет получить доступ к данным анонимной учетной записи в Firebase.
Следующие шаги
После создания пользователем новой учетной записи, она сохраняется как часть вашего проекта Firebase и может использоваться для идентификации пользователя во всех приложениях вашего проекта, независимо от того, какой способ входа в систему использовал пользователь.
В ваших приложениях вы можете получить основную информацию профиля пользователя из объекта User . См. раздел «Управление пользователями» .
В правилах безопасности Firebase Realtime Database и Cloud Storage вы можете получить уникальный идентификатор пользователя, вошедшего в систему, из переменной auth и использовать его для управления доступом пользователя к данным.
Вы можете разрешить пользователям входить в ваше приложение, используя несколько поставщиков аутентификации, связав учетные данные поставщика аутентификации с существующей учетной записью пользователя.
Для выхода пользователя из системы вызовите signOut() :
await FirebaseAuth.instance.signOut();