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

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

Прежде чем начать

  1. Если вы еще этого не сделали, следуйте инструкциям в руководстве по началу работы .

  2. Включить анонимный вход:

    • В разделе «Аутентификация» консоли 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.");
  }
}

Преобразовать анонимную учетную запись в постоянную учетную запись

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

  1. После регистрации пользователя завершите процесс входа в систему для поставщика аутентификации пользователя, включая вызов одного из методов signInWith (не включая его). Например, получите токен Google ID, токен доступа Facebook или адрес электронной почты и пароль пользователя.

  2. Получите объект Credential для нового поставщика аутентификации:

    // Google Sign-in
    final credential = GoogleAuthProvider.credential(idToken: idToken);
    
    // Email and password sign-in
    final credential =
        EmailAuthProvider.credential(email: emailAddress, password: password);
    
    // Etc.
    
  3. Передайте объект 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();