我正在使用此代码
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 [空] | ____ serverTimestamp:1
以为我已经设定了完整的规则,但仍然无法获取时间戳
答案 0 :(得分:0)
您为用户节点设置了规则。您还需要为“ 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)/”