Как сохранить дополнительную информацию о пользователе при использовании аутентификации firebase в приложении Ioni c / Angular? - PullRequest
0 голосов
/ 30 апреля 2020

Ниже я использую аутентификацию firebase для регистрации пользователей в моем приложении Ioni c / Angular:

import * as firebase from 'firebase';

name: string = '';
email: string = '';
password: string = '';
isMechanic: boolean = false;

signup() {
    firebase.auth().createUserWithEmailAndPassword(this.email, this.password)
      .then((data) => {    
        let newUser: firebase.User = data.user;
        newUser.updateProfile({
          displayName: this.name,
          photoURL: ''
        }).then(() => {
        }).catch((err) => {
        })
      }).catch((err) => {
      });
  }

Я могу успешно зарегистрироваться, используя это.

Тем не менее, я хочу сохранить значение isMechanic как часть User, чтобы я мог определить, являются ли они механиками c или нет.

Может кто-нибудь сказать, пожалуйста, как это сделано в огненной базе?

Ответы [ 2 ]

0 голосов
/ 01 мая 2020
  • добавить некоторые данные пользователю, используя updateProfile
  • создать запись в новой коллекции users
  • использовать uid для пользователя, которого вы только что создали
  • создать новую запись
export const doCreateAccount = (
  accountInfo: any
): Promise<boolean | string> => {
  return new Promise(async (resolve, reject) => {
    try {
      // handle the user creation for authentication
      await auth.createUserWithEmailAndPassword(
        accountInfo.email,
        accountInfo.password
      );

      await auth?.currentUser?.updateProfile({
        displayName: accountInfo.firstName + " " + accountInfo.lastName,
      });

      let usersRef = firebase
        .firestore()
        .collection("users")
        .doc(auth.currentUser?.uid);

      let accountCreated = firebase.firestore.Timestamp.fromDate(new Date());

      let newUserData = {
        ...accountInfo,
        activationEmailSent: { wasSent: true, accountCreated },
      };

      // save the user profile information

      delete newUserData["password"];
      delete newUserData["password2"];
      await usersRef.set(newUserData);

      resolve(true);
    } catch ({ message }) {
      reject(message);
    }
  });
};
0 голосов
/ 30 апреля 2020

Additional User Info, на который вы ссылаетесь, называется Metadata

Если вы посмотрите официальный JavaScript SDK для Firebase https://firebase.google.com/docs/reference/js/firebase.User

Вы обнаружите, что firebase.user содержит свойство с именем metadata
К сожалению - у них нет возможности хранить что-либо в этом объекте - это только creationTime и lastSigninTime. (Infact Firebase не предоставляет никакого механизма для хранения информации о стороне пользователя в пользовательской таблице)

Я бы предложил architecturally better approach, чтобы создать другую таблицу с именем user-metadata, имеющую user-id as a foreign key и соответствующую информацию ,
как только вы получите идентификатор пользователя после аутентификации - вы можете просто добавить запись в таблицу метаданных пользователя с идентификатором пользователя и значением isMechanic.

Для получения результатов - вы можете просто выполнить Операция соединения между пользовательской таблицей firebase и таблицей пользовательских метаданных и выдача результатов.

надеюсь, что это хорошая отправная точка для вашей работы.

...