【问题标题】:Can't display user data from Firebase database无法显示 Firebase 数据库中的用户数据
【发布时间】:2019-02-02 03:30:00
【问题描述】:

我的应用程序能够从 Firebase 的数据库加载数据,但现在我无法显示它。我假设这与 Firebase 更新有关。我可以通过调用 .child("users").child((currentUser?.uid)!).child("userDetails") 来访问数据,而我的 currentUser 是 Auth.auth().currentUser。方法变了吗? iOS 应用程序如何从 Firebase 读取数据?

override func viewDidLoad() {
    super.viewDidLoad()
    let currentUser = Auth.auth().currentUser
    if currentUser == nil {
        self.showMessage(messageToDisplay: "Could not read user details")
        return
    }

    print("User id = \(String(describing: currentUser?.uid))")
    print("User email \(String(describing: currentUser?.email))")
    print("Is email verified \(String(describing: currentUser?.isEmailVerified))")

    var databaseReference:DatabaseReference!
    databaseReference = Database.database().reference()

    databaseReference.child("users").child((currentUser?.uid)!).child("userDetails").observeSingleEvent(of: DataEventType.value) { (snapshot) in

        let userDetailsData = snapshot.value as? NSDictionary
        let firstName = userDetailsData?["firstName"] as? String ?? ""
        let lastName = userDetailsData?["lastName"] as? String ?? ""

        self.fullNameLabel.text = self.fullNameLabel.text! + " " + firstName + " " + lastName
    }

}

我收到以下错误:

/users/(省略用户 ID)/userDetails 处的侦听器失败:permission_denied TIC TCP 连接失败 [9:0x604000169e40]: 1:61 Err(61) HTTP 加载失败(错误代码:-1004 [1:61]) 任务完成但出现错误 - 代码:-1004 遇到网络错误。代码,错误:-1004,错误域=NSURLErrorDomain 代码=-1004“无法连接到服务器。”

【问题讨论】:

  • 检查您的 Firebase 规则以确保它允许 .read 在“用户”节点
  • "users": { "$uid":{ ".read":"auth != null && auth.uid == $uid", ".write": "auth != null && auth.uid == $uid" }

标签: swift firebase firebase-realtime-database


【解决方案1】:

默认情况下,Firebase 项目中的数据库只能由经过身份验证的用户访问:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

因此,要显示用户数据,您需要更改规则以允许未经身份验证的用户:

{
  "rules": {
    "users": {
      ".read": true,
      ".write": true
    }
  }
}

或者在尝试访问用户数据之前对用户进行身份验证:

Auth.auth().signIn(withEmail: email, password: password) { (user, error) in
  if error == nil {
    // Success!
  } else {
    // Sign in failed
  }  
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多