Регистрация/существование пользователя в Firebase, вероятно, должна быть определена перед кодом graphRequest в вопросе.
Самое главное, (и это важно), адреса электронной почты являются динамическими, поэтому они не должны использоваться для проверки наличия пользователя. то есть пользователь с адресом электронной почты '[email protected]' обновляет свое письмо на адрес [email protected] Если электронные письма используются для проверки регистрации, он может полностью нарушиться, если это сообщение изменится.
Пожалуйста, используйте Firebase uid для этой цели, поскольку они являются статическими и уникальными.
Поскольку у нас есть только небольшой фрагмент кода, мы не знаем, какая именно последовательность используется. Этот ответ является псевдокодом, чтобы описать возможную последовательность.
Мы предполагаем, что «зарегистрированным» означает, что пользователь прошел через какую-либо регистрационную последовательность приложений, и пользователь был создан (и теперь существует/зарегистрирован) в Firebase.
В общем, была бы кнопка входа в систему и метод делегата для обработки действительного действия входа.
Пользователь вводит свой логин и отводы кнопку входа
func loginButton(loginButton: FBSDKLoginButton!,
didCompleteWithResult result: FBSDKLoginManagerLoginResult!,
error: NSError?) {
Firebase может затем получить учетные данные для этого пользователя (см Firebase DOC цитата ниже)
let credential = FIRFacebookAuthProvider.credential(withAccessToken: FBSDKAccessToken.current().tokenString)
В этот момент подписать в пользователь и проверьте, зарегистрированы ли они (существуют) в пользовательском узле Firebase.
FIRAuth.auth()?.signIn(with: credential) { (user, error) in
if let error = error { //failed due to an error
return
}
let uid = user.uid //the firebase uid
let thisUserRef = userRef.child(uid) //a reference to the user node
//check to see if the user exists in firebase (i.e. is Registered)
thisUserRef.observeSingleEvent(of: .value, with: { (snapshot) in
//if snapshot exists
//then the user is already 'registered' in the user node
// so continue the app with a registered user
//if not, then need to have the user go through a registration sequence and
// then create the user (make them registered) in the user node
doRegisterUser(user)
})
func doRegisterUser(user: FIRUser) {
//get what you need from the user to register them
// and write it to the users node. This could be from additional
// questions or from their Facebook graph, as in the code in the
// question
//for this example, we'll just write their email address
let email = user.email
let dict = ["email": email]
//create a child node in the users node with a parent of uid
// and a child of email: their email
thisUserRef.setValue(node)
//next time the user logs in via FB authentication, their user node
// will be found as they are now a 'registered' user
}
Из Firebase Docs
После того, как пользователь в первый раз, новая учетная запись пользователя создан и связан с мандатным-то есть, имя пользователя и пароля, или информацию об автоответчике, с которой пользователь вступил. Это нового счета хранится как часть вашего Firebase проекта, и может быть используется для идентификации пользователя через каждое приложение в вашем проекте, независимо того, как знаки пользователя в.
Как я уже говорил, это очень псевдокод, но предлагает возможную последовательность для решения.
Вопрос немного неясен, поэтому трудно ответить. Если пользователь аутентифицируется с помощью проверки подлинности Facebook, они аутентифицируются - зачем вам искать их электронную почту? то есть API Firebase Facebook создает пользователь Firebase. См. Шаги 4 и 5 в статье [Проверка подлинности в Интернете] (https://firebase.google.com/docs/auth/ios/facebook-login) – Jay
@Jay мое приложение требует регистрации пользователя – Reem
Это не совсем понятно, что это значит, но я создал ответ, который может быть тем, что вы ищете. – Jay