我正在使用此代码
var currentTimeStamp: TimeInterval?
let ref = Database.database().reference().child("serverTimestamp")
ref.setValue(ServerValue.timestamp())
ref.observe(.value, with: { snap in
if let t = snap.value as? Timestamp {
// print(t/1000)
// currentTimeStamp = t/1000
//Add additional data(Timestamp) to list
mutableData["timestamp"] = currentTimeStamp
//FINALLY , set data
newdoc.setData(mutableData) { (error) in
completion(docID)
}
}
})
得到这个错误
Firebase/Database][I-RDB038012] Listener at /serverTimestamp failed: permission_denied
我的规则设置为Auth,但是auth用户仍然无法获取时间戳
// These rules grant access to a node matching the authenticated
// user's ID from the Firebase auth token
{
"rules": {
"users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}
我想在Firebase Realtime Database中写入时间戳,当前结构为。
myproject [null]
| ____ serverTimestamp:1
以为我已经制定了完成公众的规则仍然无法获得时间戳
最佳答案
您为用户节点设置了规则。您还需要为“ serverTimestamp”节点指定规则。
{
"rules": {
"users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
},
"serverTimestamp": {
".read": "auth_uid != null",
".write": "auth_uid != null"
}
}
}
这是如果您保持结构相同。
当您在Firebase中指定规则时,它们使用的术语是原子的,您需要为每个节点指定规则,并且每个子节点在应用自己的规则之前先应用父规则。您的规则仅适用于“ $ uid”节点,您未为“ serverTimestamp”指定任何规则,并且由于“ serverTimestamp”不在“ $ uid”之下,因此权限被拒绝。
例如,如果您尝试读取/写入“用户”节点,则使用当前权限,您还将获得拒绝权限。您只能访问“用户/($ uid)/”
关于ios - Firebase ios无法获取时间戳[Firebase/Database] [I-RDB038012]/serverTimestamp处的监听器失败:Permission_denied,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53219510/