如何在Swift代码中适配已配置的Firebase Database安全规则
核心逻辑说明
你配置的Firebase实时数据库安全规则要求:仅当当前已登录的Firebase Auth用户的uid等于jack时,才有权限写入users节点下的数据。所以你需要先完成身份认证、拿到uid为jack的有效登录状态后,再执行写入操作。
代码修改步骤
- 首先确保你已经在项目中集成了
FirebaseAuth依赖 - 写入操作必须放在登录成功的回调中执行,保证请求携带有效的认证信息
完整可运行代码示例
import UIKit import Firebase import FirebaseAuth import FirebaseDatabase class ViewController: UIViewController { var ref: DatabaseReference! override func viewDidLoad() { super.viewDidLoad() // 初始化数据库引用 ref = Database.database().reference() } // 调用此方法执行登录+写入逻辑 func executeWriteOperation() { // 可根据你的登录方式替换此处代码:自定义token登录/邮箱密码登录/匿名登录等 // 以下为自定义token登录示例,生成自定义token时需指定uid为jack let customToken = "从你的后端服务获取的、uid为jack的自定义登录token" Auth.auth().signIn(withCustomToken: customToken) { [weak self] authResult, error in guard let self = self else { return } // 处理登录错误 if let error = error { print("登录失败:\(error.localizedDescription)") return } // 校验当前登录用户uid是否符合规则要求 guard Auth.auth().currentUser?.uid == "jack" else { print("当前登录用户无写入权限") return } // 执行写入操作 self.ref.child("users/jack").setValue("jack") { error, _ in if let error = error { print("写入失败:\(error.localizedDescription)") } else { print("写入成功") } } } } }
注意事项
- 如果你是测试场景,可以使用匿名登录,之后在Firebase控制台将生成的匿名用户uid修改为
jack即可,对应登录代码替换为:
Auth.auth().signInAnonymously() { [weak self] authResult, error in // 后续校验、写入逻辑和上文一致 }
- 生产环境不要硬编码任何登录凭证到客户端代码中,自定义token等敏感信息需要从你的后端服务安全获取
- 不要在登录完成前执行写入操作,否则请求未携带认证信息会直接被安全规则拒绝
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

