#AskFirebase: есть ли встроенный метод для безопасной проверки и существующей электронной почты пользователя в Firebase? - PullRequest
0 голосов
/ 02 октября 2018

Существует ли встроенный метод проверки существования пользователя без предоставления вашей «пользовательской» коллекции неаутентифицированным пользователям?(Доступ только для чтения по-прежнему будет отображать всю коллекцию пользователей.) Ниже приведено традиционное решение:

  usersRef.child('users').child(userId).once('value', function(snapshot) {
    var exists = (snapshot.val() !== null);
  });

Мой вариант использования - это процесс регистрации с несколькими этапами.Я хочу проверить существование пользователя до того, как кандидат прибудет на последний этап.

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

Мне известно о возвращенном коде ошибки " auth / email-уже используется "от createUserWithEmailAndPassword.Однако проверку необходимо выполнить до того, как будет предоставлен пароль.

Просто убедитесь, что его не существует, прежде чем я начну разрабатывать службу;)

1 Ответ

0 голосов
/ 02 октября 2018

Чтобы иметь возможность проверить, существует ли определенный узел, вы должны быть в состоянии прочитать этот узел.Если мы посмотрим конкретно на ваш код:

usersRef.child('users').child(userId).once('value', ...

Этот код требует, чтобы у пользователя был доступ на чтение к /users/$userId. не требует, чтобы они имели доступ ко всем /users.

То же самое, если вы создадите узел верхнего уровня emails, в котором вы сохраните электронные письма, которые уже используются.Чтобы проверить, используется ли конкретное письмо, пользователю нужен только доступ к /emails/$email, ему не нужно иметь доступ к /emails.

Итак:

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth.uid !== null"
      }
    },
    "emails": {
      "$email": {
        ".read": "auth.uid !== null"
      }
    }
  }
}

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

Обратите внимание, что создание собственного сервиса тоже подойдет.Но если основной вариант использования заключается в том, чтобы надежно проверить, заявлен ли уже определенный UID / электронная почта, вы, вероятно, можете обойтись только с базой данных.

...