You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Swift代码中适配已配置的Firebase Database安全规则

核心逻辑说明

你配置的Firebase实时数据库安全规则要求:仅当当前已登录的Firebase Auth用户的uid等于jack时,才有权限写入users节点下的数据。所以你需要先完成身份认证、拿到uid为jack的有效登录状态后,再执行写入操作。


代码修改步骤

  1. 首先确保你已经在项目中集成了FirebaseAuth依赖
  2. 写入操作必须放在登录成功的回调中执行,保证请求携带有效的认证信息

完整可运行代码示例

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:06:02