В моем приложении есть пароль для входа в facebook и адрес электронной почты с помощью firebase. Теперь для тех пользователей, которые подписаны на Facebook, я не хочу проверять их электронную почту. но в Auth.auth().currentUser?.isEmailVerified всегда возвращается false. так есть ли какой-либо другой метод определения того, что пользователь вошел в систему с помощью facebook. Я знаю, что могу сохранить значение внутри пользователя по умолчанию до входа в систему, но после удаления и переустановки приложения я потеряю это значение по умолчанию. в то время как firebase сохраняет пользователя в системе. Я могу использовать для этого связку ключей, но если firebase напрямую предоставит это, это упростит кодирование.





Firebase не предоставляет способ показать, какой метод был первым, который использовался для создания учетной записи Firebase. У вас будет список всех поставщиков, привязанных к пользователю firebase, с привязанными к ним адресами электронной почты / номерами телефонов.
Firebase по умолчанию устанавливает только электронные письма, проверенные для входа в Google, для других провайдеров поведение Firebase заключается в установке false (хотя в некоторых случаях он устанавливает значение электронной почты, подтвержденное как истинное, случайным образом). Причина в том, что Firebase не может гарантировать, что адрес электронной почты подтвержден facebook на их платформе., но в случае с Google Firebase есть доверие.
Один из вариантов - вы всегда отправляете электронное письмо с подтверждением, независимо от того, facebook или Email Auth. Во-вторых, вы отказываетесь от входа в систему с паролем по электронной почте и вместо этого используете новую аутентификацию по электронной почте, которая устраняет аутентификацию по электронной почте, необходимую для входа в систему с паролем.
Обновлено:
если вы разрешаете использовать только один метод за раз, вы можете получить список поставщиков от пользователя firebase и проверить, есть ли в списке поставщиков метод входа в систему `` пароль '', отправить электронное письмо с подтверждением после проверки подтвержденного адреса электронной почты, иначе не отправьте электронное письмо и продолжите приложение
Вот ресурс для аутентификации ссылки по электронной почте: https://firebase.google.com/docs/auth/ios/email-link-auth
разрешаете ли вы пользователю, входящему в систему facebook, использовать пароль электронной почты в качестве метода входа?
как вторичный метод?
да, пользователь может войти в систему с помощью электронной почты / пароля или Facebook.
если вы разрешаете использовать только один метод за раз, вы можете получить список поставщиков от пользователя firebase и проверить, есть ли в списке поставщиков метод входа в систему `` пароль '', отправить электронное письмо с подтверждением после проверки подтвержденного адреса электронной почты, иначе не отправьте электронное письмо и продолжите приложение.
пожалуйста, отметьте и ответ как правильный, если вы сочтете это обсуждение полезным.
Уже проголосовали за ваш ответ. для правильного будет ждать и других вводов :)
Вы можете использовать:
if let user = Auth.auth().currentUser {
if FBSDKAccessToken.current() != nil {
// logged in using facebook
}
else {
// logged in using manual email/password method
}
}
поэтому вы можете отправлять письма с подтверждением только тем, кто вошел в систему, используя метод электронной почты / пароля.
Хороший. но это методы Facebook SDK.
@jay, значит, вы хотите сделать это без использования Facebook SDK?
нет нет, я использую Facebook SDK .. но поскольку мы входим через сервер Firebase, они должны предоставить подробную информацию.
Я нахожу одно решение с методами firebase:
if let providerData = Auth.auth().currentUser?.providerData {
for userInfo in providerData {
switch userInfo.providerID {
case "facebook.com":
print("Facebook Login")
//isVerifiededUser = true
default:
print("provider is \(userInfo.providerID)")
}
}
}
Этот код означает, что в какой-то момент пользователь зарегистрировался с помощью Facebook, но это не означает, что в этот момент пользователь использует этого провайдера для доступа. Если у пользователя есть эти поставщики ["google.com", "facebook.com"], он также вернет true. ??
fileprivate func userHasFBProvider() -> Bool{
var fBProvider = false
guard let providerData = Auth.auth().currentUser?.providerData else {
return fBProvider
}
for userInfo in providerData {
switch userInfo.providerID {
case "facebook.com":
fBProvider = true
default:
fBProvider = false
}
}
return fBProvider
}
Да, ты прав. но для пользователя Facebook я не хочу подтверждать его электронную почту. поскольку они уже предоставляют свои данные через среду facebook. мы можем понять, что firebase не проверена для Facebook, но с точки зрения обычного пользователя этого достаточно для проверки пользователей.