При использовании сервиса Аутентификации Firebase, как генерировать ошибку при входе через Facebook / Google без существующего аккаунта - PullRequest
0 голосов
/ 15 мая 2018

Я разрабатываю приложение Flutter с использованием Firebase Authentication service.

Используются следующие плагины Flutter:

  1. Firebase_auth

  2. Google_sign_in

  3. Facebook_login

Порядок входа в систему:

  1. Вход через Facebook, Google или по электронной почте и паролю
  2. Если учетная запись уже создана, войдите в систему
  3. Если нет, выдает ошибку

Это возможно, если в качестве метода регистрации используется электронная почта и пароль.В плагине Firebase_auth есть два отдельных метода для сценария электронной почты и пароля: createUserWithEmailAndPassword и signInWithEmailAndPassword.Когда метод входа вызывается с несуществующей учетной записью, он выдаст ошибку wrong id/password.

Однако для метода входа в Facebook / Google плагин предоставляет только signInWithFacebook и signInWithGoogle, и они работают так, что при первом входе в систему пользователь использует учетную запись Facebook / Google, Firebaseавтоматически создаст аккаунт и вернет вновь созданный аккаунт.(без отдельного процесса sign up и sign in)

Я также читаю на Firebase doc для Android Google Войти

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

Итак, мой вопрос:Если пользователь входит в систему с учетной записью Fb / G, которая еще не использовалась для регистрации в моем приложении на Firebase, как мне сделать Firebase authentication сгенерировать ошибку вместо автоматического создания новой учетной записи?

1 Ответ

0 голосов
/ 17 мая 2018

Малкольм из команды Firebase здесь! Отличный вопрос

Учитывая функциональность, которая в настоящее время существует в плагинах Flutter с открытым исходным кодом , вы, вероятно, можете получить желаемый результат, используя метод #fetchProvidersForEmail (). Вот логические шаги, которые вы будете выполнять для федеративных IDP:

  1. Выполните обычный вход в систему с IDP и получите токен.
  2. Разбор возвращенного токена для электронной почты пользователя (обычно с использованием библиотеки синтаксического анализа JWT).
  3. Вызовите #fetchProvidersForEmail () с извлеченным письмом.
  4. Если провайдеры, которые возвращаются по электронной почте, пусты, то это новая учетная запись. В противном случае это существующий аккаунт.

Кроме того, вы можете обновить плагин Flutter, чтобы он возвращал больше AuthResult , в котором указывается, является ли пользователь новым. Если пользователь является новым, то вы просто вызываете FirebaseAuth # getCurrentUser () # delete () и выбрасываете любую ошибку, которую хотите. (Который вы также должны добавить к плагину).

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