我有一个小用户登录表单,其中新用户必须添加他的用户名,密码和昵称(因为基本的firebase auth只接受电子邮件作为用户名,对吧? )。在创建用户之前检查Firebase上是否存在数据
的关键是基于用户名和它有2个孩子:昵称和用户名。
在我尝试使用Firebase中的auth方法创建用户之前,我会查询以检查昵称是否已存在。如果是,它不会创建用户并引发警报。如果昵称不存在,它将创建用户,然后将昵称添加到上图中的用户结构中。
一段时间思考和修改代码(代码在跳过'observeSingleEventOfType'并执行createUser,然后检查昵称是否已经存在),我认为一个好主意是获取createUser代码并添加它直接在昵称查询中的observeSingleEventOfType中,作为'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)
})
}
})
}
不再需要这个问题了,但总的来说:请记住,问题中的JSON树的图片几乎不像JSON那样有用,因为您可以通过单击“导出”按钮您的Firebase数据库。将JSON作为文本可以搜索,使我们能够轻松使用它来测试您的实际数据,并将其用于我们的答案中,并且通常只是一件好事。 –