我希望获得与事件相对应的用户
我有一个事件列表
let eventsRef = FIRDatabase.database().reference.child("Events")
我有一个用户列表
let usersRef = FIRDatabase.database().reference.child("Users")
我的活动和用户模型如下
永远不会调用以下回调(在事件模型中):
if let userKey = eventData["eventHost"] as? String {
userRef = usersRef.child(userKey)
userRef.observeSingleEvent(of: .value, with: { snapshot in
...
})
}
我可以确认我没有启用磁盘持久性,并且用户uid可用。我有什么明显错的吗?
====== 编辑:简化事件模型
import Foundation
import Firebase
class Event {
// event metadata
private var _eventId: String!
private var _eventHost: User!
var eventId: String {
return _eventId
}
var eventHost: User {
return _eventHost
}
init(eventId: String, eventData: Dictionary<String, Any>) {
self._eventId = eventId
if let userKey = eventData["eventHost"] as? String {
let usersRef = FIRDatabase.database().reference().child("Users")
let userRef = usersRef.child(userKey)
print(userRef)
userRef.observeSingleEvent(of: .value, with: { (snapshot) in
print("USERY: \(snapshot.key)")
if let userDict = snapshot.value! as? Dictionary<String, Any> {
let id = snapshot.key
self._eventHost = User(userId: id, userData: userDict)
}
})
}
}
}
print(userRef)
解析为
https://xxxx.firebaseio.com/Users/AFHpS3npOga4tfj10GS2HGeT9uJ3`
这是我的Firebase结构中的有效对象。 Firebase用户结构的片段
"AFHpS3npOga4tfj10GS2HGeT9uJ3" : {
"email" : "test@gmail.com",
"firstName" : "Wilma",
"lastName" : "Flintstone",
"profileImageUrl" : "http://images.iimg.in/c/569f4771c45d324bda8b4660-4-501-0-1453279096/google/user-icon-png-pnglogocom.img",
"provider" : "Firebase",
"userId" : "AFHpS3npOga4tfj10GS2HGeT9uJ3"
},
答案 0 :(得分:1)
您可以查看firebase数据库的规则:
它应该是这样的
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
为了让未经过身份验证的人员读/写数据,您应该执行以下操作:
{
"rules": {
".read": true,
".write": true
}
}
从你发布的代码我看不出任何问题...... 如果这不起作用,请发布更多代码并告诉我们您打算做什么,以便我们更好地为您提供帮助。
编辑:为了配合上述建议,在观察功能中添加取消阻止将显示是否存在规则问题。如果用户无法访问该节点,Xcode控制台将打印“Permission Denied”
userRef.observeSingleEvent(of: .value, with: { (snapshot) in
print("USERY: \(snapshot.key)")
if let userDict = snapshot.value! as? Dictionary<String, Any> {
let id = snapshot.key
self._eventHost = User(userId: id, userData: userDict)
}
}, withCancel: { error in
print(error.localizedDescription)
})