Управление пользователем - Firebase и Angular - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь получить пользователя по электронной почте, и это кажется довольно простым.Я следую этой документации

Кажется, мой код не распознает admin, что является нормальным явлением, потому что я нигде не определился.То, что я сделал, это изменил admin на firebase, являясь базой огня:

import * as firebase from "firebase/app";

, и код был бы:

firebase.auth.getUserByEmail(participantEmail)

, но я получил следующую ошибку:

Свойство 'getUserByEmail' не существует для типа 'Auth' .ts (2339)

Нужно ли что-то предварительно устанавливать перед этим?Я что-то пропускаю?

Моя цель - получить список всех электронных писем пользователей, зарегистрированных в моей системе, и затем отфильтровать их, или напрямую связаться с конкретным пользователем, просмотрев письмо (второй вариант будетбыть лучше).

ОБНОВЛЕНИЕ Теперь я создаю список пользователей каждый раз, когда кто-то входит в систему, но я думаю, что firebase каким-то образом ограничивает информацию.

Зарегистрируйте

  registerUser(
    email: string,
    pass: string,
    displayName: string,
    photoURL: string
  ) {
    return new Promise((resolve, reject) => {
      this.afAuth.auth.createUserWithEmailAndPassword(email, pass).then(
        user => {
          resolve(user);
          user.updateProfile({
            displayName: displayName, // some displayName
            photoURL: photoURL
          });
          //NEEDS TO BE INSIDE UPDATEPROFILE
          this.insertUser(user);
        },
        err => {
          this.s_registerError = err.message;
          reject(err);
        }
      );
    });
  }

Вставьте список

  //Insert a new bet
  insertUser(user) {
    console.log(user);
    console.log(user.email);
    console.log(user.displayName);

    this.listToStore = this.db.list("users");
    this.listToStore.push({
      photoURL: user.photoURL,
      email: user.email,
      displayName: user.displayName
    });
  }

здесь, я получаю значение user во всех его полях, что означает, что когда яиспользуйте console.log(user) Я могу видеть displayName, email и photoURL.Тем не менее, если я пытаюсь использовать console.log(user.displayName) prints null и если я использую console.log(user.email) print, то его значение.

я думал, что это может быть потому, что user.updateProfile() не закончил, но на самом деле, я получаюзначение user в insertUser() без проблем

Ответы [ 3 ]

1 голос
/ 20 марта 2019

Как вы уже указали: getUserByEmail является только частью административного SDK, и вы не сможете вызывать его из своего Angular-кода.

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

Более подробную информацию о том, какая информация доступна для пользовательского объекта firebase , можно найти в документации .Просто скопируйте то, что вам нужно, и сохраните его в коллекции, которую вы можете запросить из своего приложения Angular.

export const createUserDoc = functions.auth.user().onCreate(event => {
    const firebaseUser = event.data;
    const user = {
        name: firebaseUser.displayName,
        email: firebaseUser.email,
        photoUrl: firebaseUser.photoURL
    };

    return firebase.firestore().collection("users").doc(firebaseUser.uid).set(user);
});

1 голос
/ 20 марта 2019

Делая

import * as firebase from "firebase/app";

в своем клиентском приложении, вы фактически импортируете JavaScript SDK , а не Admin SDK .Это правильный путь, если этот импорт выполняется в интерфейсном приложении, поскольку Admin SDK должен использоваться «из среды защищенного сервера».

Вот почему вы получаете ошибку Property 'getUserByEmail' does not exist on type 'Auth'.ts(2339),поскольку этот метод не является частью службы Firebase Auth.

Сказав это, вы должны знать, что с помощью JavaScript SDK нет простого способа "получить списоквся электронная почта пользователя, зарегистрированная в [вашей] системе ".

" Обычный "способ сделать это - вести список пользователей в вашей базе данных (база данных RealTime или Firestore) и запрашивать базу данных по мере необходимости.

0 голосов
/ 20 марта 2019

Только Firebase Admin SDK может получить пользователя от Firebase Authentication.Admin SDK следует использовать только в безопасной среде, то есть на бэкэнд-сервере.

Что вы можете сделать, это использовать облачные функции Firebase Триггер создания аутентификации , а затем записать адрес электронной почты в базу данных Firebase / Firestore,Затем вы можете запросить вашу базу данных в угловом приложении, чтобы отфильтровать пользователей по адресу электронной почты.

Другой вариант - использовать функцию HTTPS, на которую вы можете отправить адрес электронной почты, и функция можетзатем используйте admin sdk для извлечения пользователя из аутентификации Firebase.

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