Привязка другого провайдера к учетной записи авторизации телефона с помощью электронной почты

#ios #firebase-authentication

#iOS #firebase-аутентификация

Вопрос:

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

В частности, я хочу проверить, выполнял ли пользователь, который в настоящее время входит в систему с помощью метода авторизации, отличного от телефонного (Facebook, Google и т. Д.), Ранее входил в систему с помощью авторизации по телефону.

При создании учетной записи авторизации по телефону я требую, чтобы пользователь вводил адрес электронной почты. После создания пользователя я сохраняю адрес электронной почты в его authUser учетной записи, используя:

 authData.user.updateEmail(to: email, completion: { (error) in
                // email added successfully
            })
  

Адрес электронной почты сохранен правильно и отображается в консоли аутентификации Firebase.

Однако, когда я позже попытаюсь найти поставщиков для этого адреса электронной почты, используя:

 Auth.auth().fetchProviders(forEmail: email, completion: { (providers, error) in
                // providers.count = 0
            })
  

или

 Auth.auth().fetchSignInMethods(forEmail: email, completion: { (signInMethods, error) in
                // signInMethods == nil
            })
  

Электронное письмо не найдено.

Таким образом, похоже, что электронная почта подключена к User , но не к провайдеру или методу входа.

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

Ответ №1:

fetchSignInMethods не вернет никаких результатов, даже если электронное письмо существует, но не содержит поставщиков или методов входа для входа.

В вашем случае вы просто обновляете адрес электронной почты или учетную запись. Этого недостаточно. Пользователь должен войти в систему с помощью электронной почты. Например, если пользователь подписывается с помощью ссылки на электронную почту или пароля, то fetchSignInMethods вернутся эти методы входа.