У меня есть небольшая форма входа в систему, где новый пользователь должен добавить свое имя пользователя, пароль и псевдоним (поскольку базовая аутентификация firebase принимает только электронную почту в качестве имени пользователя, верно?).
Это структура пользователей, которую я создал в Firebase для получения псевдонима
Ключ основан на имени пользователя и имеет 2 дочерних элемента: псевдоним и имя пользователя.
Прежде чем я попытаюсь создать пользователя с помощью методов аутентификации из Firebase, я запрашиваю, чтобы проверить, существует ли уже псевдоним. Если да, он не создает пользователя и выдает предупреждение. Если псевдоним не существует, он создает пользователя, а затем добавляет псевдоним в структуру пользователей из изображения выше.
Некоторое время обдумывая и меняя код здесь и там (код перескакивал через «ObservationSingleEventOfType» и выполнял createUser, прежде чем проверять, существует ли уже псевдоним), я подумал, что хорошей идеей было получить код createUser и добавить его прямо внутри НаблюдатьSingleEventOfType в запросе псевдонима как 'else' для 'if snapshot.exists ()' ...
Кажется, он работает, но я не знаю, является ли это «правильным» способом его выполнения ...
Есть ли другой способ (лучший способ) сделать это?
Метод ниже. Спасибо!
func createUser(username: String, password: String, nickname: String){
var userCreated = false
var errorCode = 0
users.queryOrderedByChild("Nickname").queryEqualToValue(nickname).observeSingleEventOfType(.Value, withBlock: { (snapshot) in
if snapshot.exists() {
errorCode = 3
self.delegate?.didReceiveResponseFromFirebaseCreateUser!(userCreated, errorCode: errorCode)
}
else{
self.ref.createUser(username, password: password, withCompletionBlock: { (error) in
if error != nil {
print (error.description)
if error.description.rangeOfString("EMAIL_TAKEN") != nil {
errorCode = 1
}
else if error.description.rangeOfString("INVALID_EMAIL") != nil {
errorCode = 2
}
}
else{
userCreated = true
let newUser = User(username: username, nickname: nickname)
let newUserRef = self.users.childByAppendingPath(username.stringByReplacingOccurrencesOfString(".", withString: "-"))
newUserRef.setValue(newUser.toAnyObject())
}
self.delegate?.didReceiveResponseFromFirebaseCreateUser!(userCreated, errorCode: errorCode)
})
}
})
}