Облачные функции Firebase - Оцените, может ли пользователь быть зарегистрирован - PullRequest
0 голосов
/ 11 ноября 2018

Допустим, у меня есть коллекция с именем people, и у каждого документа есть имя свойства phone_number.

Конечно, я мог бы разрешить пользователю зарегистрироваться, и если его номер телефона существует,Я могу считать его подтвержденным.Но если у пользователя нет номера телефона ни в одном из упомянутых мной ранее документов, я бы не хотел, чтобы он регистрировался с самого начала.

Как я могу сказать Firebase, чтобы разрешить пользователям регистрироваться толькоесли их номера телефонов есть в документах?В другом бэкэнде (например, в nest) я бы создал канал, который просто проверяет, существует ли данный номер телефона в запросе.

1 Ответ

0 голосов
/ 11 ноября 2018

Если я правильно понимаю ваше требование, вам следует просто проверить, есть ли в вашей коллекции документальный файл с этим phone_number с запросом через Admin SDK.

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

exports.registerUser = functions.https.onRequest((req, res) => {
  const phone_number = req.body.phone_number;
  const peopleCollecRef = admin.firestore().collection('people');

  peopleCollecRef
    .where('phone_number', '==', phone_number)
    .get()
    .then(querySnapshot => {
      if (querySnapshot.size === 1) {
        return admin.auth().createUser({
          email: req.body.email,
          emailVerified: false,
          phoneNumber: phone_number,
          password: '....'
        });
      } else {
          throw new Error('No user (or more than one user) with corresponding phone number ');
      }
    })
    .then(userRecord => {
      res.send({ result: 'user created with id: ' + userRecord.uid }); //Just an example
    })
    .catch(error => {
      res.status(500).send(error);
    });
});

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

...