Добавление дополнительной информации для регистрации пользователя Firebase - PullRequest
0 голосов
/ 01 февраля 2020

Я хотел бы сделать приложение в React Native, которое позволяет работать в двух режимах, родительском и дочернем. Начальным этапом является регистрация в Firebase, затем после добавления дополнительной информации о роли (родитель / потомок), регистрации как дочернего, так и родительского элемента, а также после входа в них обоих, дочерний элемент будет иметь общее местоположение, а родительский получит его.

Я хотел бы добавить дополнительные поля, такие как роль (родитель / потомок), в свое приложение в React Native + Firebase, чтобы позже создать другие функции приложения на основе роли.

Регистрация:

firebase
    .auth()
    .createUserWithEmailAndPassword(email, password)
    .then(userCredentials => {
        return userCredentials
            .user.updateProfile({
                displayName: name,
            })
            .additionalUserInfo.profile = {
            role: role,
        }
    })

Домашний экран

const { displayName } = firebase.auth().currentUser;
const { role } = firebase.additionalUserInfo.profile;

this.setState({displayName, role});

и роль возвращается неопределенной.

1 Ответ

0 голосов
/ 01 февраля 2020

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

Если вы хотите сохранить дополнительную информацию о пользователе, у вас есть две основные опции:

  1. Сохраните дополнительную информацию в качестве пользовательских утверждений в токене аутентификации пользователя.
  2. Сохраните дополнительную информацию во внешней базе данных, такой как Firestore и Realtime Database, которые являются частью Firebase.

Хотя хранение данных в качестве пользовательских утверждений довольно близко к тому, что вы хотите выполнить sh, вам нужно помнить о нескольких вещах:

  • Пользовательские утверждения используются в целях авторизации, и по этой причине можно установить только из доверенной среды (например, компьютера разработчика, сервера, которым вы управляете, или облачных функций). Таким образом, вы не можете просто установить role из приложения, и вам потребуется отдельный процесс для добавления этой заявки.
  • После установки пользовательской заявки в профиле пользователя это может занять до часа это изменение видно в клиенте. Если вам это нужно раньше, вы можете заставить пользователя снова войти в систему или обновить sh его ID-токен.
  • Пользовательские заявки отправляются при каждом запросе к ресурсам Firebase, и по этой причине они очень ограничен в размерах. Максимальный размер 1000 байтов для пользовательских утверждений для пользователя. Хотя ваш текущий role легко вписывается в это, он может ограничить то, что вы можете добавить позже.

Если вместо этого вы сохраните пользовательских данных во внешней базе данных , вы будете обычно объединяют его с другой информацией об этом пользователе в users узел / коллекцию. Здесь вы должны сохранить документ / узел для каждого пользователя на основе UID этого пользователя, а затем информацию о его профиле.

Так что-то вроде:

users: {
  uidOfAleksandra: {
    username: "Aleksandra",
    displayName: "Aleksandra Lastname",
    role: "parent",
    registrationDate: "2020-02-01"
  },
  uidOfPuf: {
    username: "puf",
    displayName: "Frank van Puffelen",
    role: "child",
    registrationDate: "2015-03-07"
  },
}

Наличие этого списка профилей пользователей не только позволяет вам хранить дополнительную информацию для каждого пользователя, но также позволяет запрашивать этот список пользователей из вашего приложения, чего не позволяет API аутентификации из кода приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...