swift - Firebase - 获取用户时权限被拒绝
问题描述
我的代码:
import Foundation
import Firebase
class UserService {
static var currentUserProfile:UserProfile?
static func observeUserProfile(_ uid:String, completion: @escaping ((_ userProfile:UserProfile?)->())) {
let userRef = Database.database().reference().child("users/profile/\(uid)")
userRef.observe(.value, with: { snapshot in
var userProfile:UserProfile?
if let dict = snapshot.value as? [String:Any],
let username = dict["username"] as? String,
let photoURL = dict["photoURL"] as? String,
let url = URL(string:photoURL) {
userProfile = UserProfile(uid: snapshot.key, username: username, photoURL: url)
}
completion(userProfile)
})
}
}
我的 Firebase 实时数据库规则是:
{
"rules": {
".read": "auth.uid != null",
".write": "auth.uid != null"
}
}
我在哪里弄错了?
解决方案
你登录了吗?您必须先使用以下方法登录;
FirebaseAuth.getInstance().signInWithEmailAndPassword
或者
FirebaseAuth.getInstance().signInAnonymously
或任何其他登录方法。
我不推荐的其他方式(因为它允许所有人访问) ,如果您想在没有身份验证的情况下使用它,您可以更改规则,例如;
{
"rules": {
".read": true,
".write": true
}
}
您可以在配置客户端后更改规则。但始终考虑规则并根据规则制作表格。
推荐阅读
- amazon-web-services - 无法在 AWS Lambda 上运行 gocv
- audio - ffmpeg 提取所有音频通道
- machine-learning - NLP 情绪分析 - 基本指南
- c - mmap() 在 C 中导致分段错误
- r - 对两个变量进行分组,然后计算一个字符串值
- struct - 为已定义结构的枚举编写 match 语句的正确方法是什么?
- javascript - jQuery sum table toFixed 无法正常工作
- java - 如何使用 putExtra() 传递具有不同值的相同数据
- javascript - TypeError: (intermediate value).flat is not a function - 将 Nuxt.js 部署到 Netlify
- facebook - 用于广播消息的 Messenger 广播 API(已弃用)的替代方案是什么?