#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
вернутся эти методы входа.