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

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

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

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

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

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

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

    Web modular API

    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 namespaced API

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

    Web modular API

    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 namespaced API

    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 modular API

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

    Web namespaced API

    var credential = firebase.auth.GoogleAuthProvider.credential(
      googleUser.getAuthResponse().id_token);
    Логин в фейсбук

    Web modular API

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

    Web namespaced API

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

    Web modular API

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

    Web namespaced API

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

    Web modular API

    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 namespaced API

    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 с Identity Platform , вы можете включить автоматическую очистку в консоли Firebase. Когда вы включаете эту функцию, вы разрешаете Firebase автоматически удалять анонимные учетные записи старше 30 дней. В проектах с включенной автоматической очисткой анонимная проверка подлинности не учитывается при расчете лимитов использования или квот на выставление счетов.

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

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

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

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