【发布时间】:2022-01-24 21:47:47
【问题描述】:
在创建新用户之前,我想检查创建 username 属性是否已存在于 Firebase 数据库中。
检查功能是:
let databaseRef = Database.database().reference()
databaseRef.child("users").queryOrdered(byChild: "username").queryEqual(toValue: loginRegisterTextField.text).observeSingleEvent(of: .value, with: { (snapshot: DataSnapshot) in
if snapshot.exists() {
print("Login exists")
} else {
print("Login does not exist")
}
})
JSON 是:
规则适用于节点users:
{
"rules": {
"users" : {
".read": "auth != null",
"$uid" : {
".write": "auth != null && auth.uid == $uid",
}
},
如果没有新的uid,是否可以编写规则来检查username 的存在?
【问题讨论】:
-
您使用的
username子节点与UID 无关,实际上也与规则无关。这个代码流的问题是,为了检查用户名是否存在,用户必须经过身份验证,但如果这是一个新用户,他们还没有经过身份验证,所以这是行不通的。一种选择是首先创建 firebase 帐户(对用户进行身份验证)然后要求他们创建用户名。在这种情况下,您的代码将按原样工作。否则,您可以保留可公开访问的用户名列表,或利用云功能。 -
@Jay 谢谢,我也想用用户名创建一个新的可读分支,但我希望直到最后不要这样做)
标签: swift firebase firebase-realtime-database firebase-security