【发布时间】:2016-08-06 18:24:25
【问题描述】:
我有一个小的用户登录表单,新用户必须在其中添加他的用户名、密码和昵称(因为基本的 firebase 身份验证只接受电子邮件作为用户名,对吗?)。
密钥基于用户名,它有 2 个子项:昵称和用户名。
在尝试使用 Firebase 中的 auth 方法创建用户之前,我会查询以检查昵称是否已经存在。如果是,它不会创建用户并引发警报。如果昵称不存在,它会创建用户,然后将昵称添加到上图中的用户结构中。
有些时间思考和更改代码(代码正在跳转'observeSingleEventOfType'并执行createUser,然后检查昵称是否已经存在),我认为一个好主意是获取createUser代码并添加它直接在昵称查询上的 observeSingleEventOfType 内,作为 'if snapshot.exists()' 的 'else' ...
它似乎正在工作,但我不知道这是否是执行它的“正确”方式......
还有其他方法(更好的方法)吗?
方法如下。 谢谢!
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 作为文本使其可搜索,让我们可以轻松地使用它来测试您的实际数据并在我们的答案中使用它,一般来说这只是一件好事。
标签: ios swift firebase swift2 firebase-realtime-database