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

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

Подготовка

  1. Добавьте Firebase в свой проект JavaScript.
  2. Если вы ещё не подключили приложение к проекту Firebase, сделайте это в консоли Firebase.
  3. Включите анонимную аутентификацию:
    1. В Firebaseконсоли администратора выберите Безопасность > Аутентификация.
    2. На вкладке Sign-in method (Способ входа) включите поставщика для анонимного входа.
    3. Необязательно. Если вы обновили проект до версии Firebase Authentication with Identity Platform, можно включить автоматическую очистку. Если вы включите этот параметр, анонимные аккаунты старше 30 дней будут удаляться автоматически. В проектах с включенной автоматической очисткой анонимная аутентификация больше не будет учитываться в лимитах на использование и квотах на оплату. Подробнее об автоматической очистке…

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

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

  1. Вызовите метод signInAnonymously:

    Web

    import { getAuth, signInAnonymously } from "firebase/auth";
    
    const auth = getAuth();
    signInAnonymously(auth)
      .then(() => {
        // Signed in..
      })
      .catch((error) => {
        const errorCode = error.code;
        const errorMessage = error.message;
        // ...
      });

    Web

    firebase.auth().signInAnonymously()
      .then(() => {
        // Signed in..
      })
      .catch((error) => {
        var errorCode = error.code;
        var errorMessage = error.message;
        // ...
      });
    Здесь же можно выявлять и обрабатывать ошибки. Список кодов ошибок можно найти в справочной документации по аутентификации.
  2. Если метод signInAnonymously завершится без ошибок, сработает наблюдатель, зарегистрированный в onAuthStateChanged, и вы сможете получить данные аккаунта анонимного пользователя из объекта User:

    Web

    import { getAuth, onAuthStateChanged } from "firebase/auth";
    
    const auth = getAuth();
    onAuthStateChanged(auth, (user) => {
      if (user) {
        // User is signed in, see docs for a list of available properties
        // https://firebase.google.com/docs/reference/js/auth.user
        const uid = user.uid;
        // ...
      } else {
        // User is signed out
        // ...
      }
    });

    Web

    firebase.auth().onAuthStateChanged((user) => {
      if (user) {
        // User is signed in, see docs for a list of available properties
        // https://firebase.google.com/docs/reference/js/v8/firebase.User
        var uid = user.uid;
        // ...
      } else {
        // User is signed out
        // ...
      }
    });

Как преобразовать анонимный аккаунт в постоянный

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

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

    вход с аккаунтом Google

    Web

    import { GoogleAuthProvider } from "firebase/auth";
    
    const credential = GoogleAuthProvider.credential(
      googleUser.getAuthResponse().id_token);

    Web

    var credential = firebase.auth.GoogleAuthProvider.credential(
      googleUser.getAuthResponse().id_token);
    Вход через Facebook

    Web

    import { FacebookAuthProvider } from "firebase/auth";
    
    const credential = FacebookAuthProvider.credential(
      response.authResponse.accessToken);

    Web

    var credential = firebase.auth.FacebookAuthProvider.credential(
      response.authResponse.accessToken);
    Вход с помощью адреса электронной почты и пароля

    Web

    import { EmailAuthProvider } from "firebase/auth";
    
    const credential = EmailAuthProvider.credential(email, password);

    Web

    var credential = firebase.auth.EmailAuthProvider.credential(email, password);
  3. Передайте объект AuthCredential методу link для входа пользователя:

    Web

    import { getAuth, linkWithCredential } from "firebase/auth";
    
    const auth = getAuth();
    linkWithCredential(auth.currentUser, credential)
      .then((usercred) => {
        const user = usercred.user;
        console.log("Anonymous account successfully upgraded", user);
      }).catch((error) => {
        console.log("Error upgrading anonymous account", error);
      });

    Web

    auth.currentUser.linkWithCredential(credential)
      .then((usercred) => {
        var user = usercred.user;
        console.log("Anonymous account successfully upgraded", user);
      }).catch((error) => {
        console.log("Error upgrading anonymous account", error);
      });

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

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

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

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

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

Дальнейшие действия

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