Вы можете использовать Firebase Authentication для создания и использования временных анонимных аккаунтов для аутентификации в Firebase. Эти временные анонимные аккаунты можно использовать, чтобы предоставить пользователям, которые ещё не зарегистрировались в вашем приложении, доступ к данным, защищенным правилами безопасности. Если анонимный пользователь решит зарегистрироваться в вашем приложении, вы можете связать его учетные данные с анонимным аккаунтом, чтобы он мог продолжать работать со своими защищенными данными в будущих сеансах.
Подготовка
- Добавьте Firebase в свой проект JavaScript.
- Если вы ещё не подключили приложение к проекту Firebase, сделайте это в консоли Firebase.
-
Включите анонимную аутентификацию:
- В Firebaseконсоли администратора выберите Безопасность > Аутентификация.
- На вкладке Sign-in method (Способ входа) включите поставщика для анонимного входа.
- Необязательно. Если вы обновили проект до версии Firebase Authentication with Identity Platform, можно включить автоматическую очистку. Если вы включите этот параметр, анонимные аккаунты старше 30 дней будут удаляться автоматически. В проектах с включенной автоматической очисткой анонимная аутентификация больше не будет учитываться в лимитах на использование и квотах на оплату. Подробнее об автоматической очистке…
Анонимная аутентификация с помощью Firebase
Если пользователь, не вошедший в аккаунт, использует функцию приложения, для которой требуется аутентификация с помощью Firebase, выполните следующие действия, чтобы анонимно войти в аккаунт пользователя:
- Вызовите метод
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; // ... });
- Если метод
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 // ... } });
Как преобразовать анонимный аккаунт в постоянный
Когда анонимный пользователь регистрируется в вашем приложении, вы можете разрешить ему продолжить работу с новым аккаунтом. Например, вы можете добавить в корзину нового аккаунта товары, которые пользователь добавил в корзину до регистрации. Для этого выполните следующие действия:
- Когда пользователь регистрируется, выполните вход через поставщика услуг аутентификации пользователя, но не вызывайте методы
Auth.signInWith. Например, получить токен идентификатора Google, токен доступа Facebook или адрес электронной почты и пароль. Получите
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);
Передайте объект
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.