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

C# WinForms中Firebase Auth登录后Realtime DB权限拒绝问题求助

解决方案:Firebase Realtime DB 写入权限拒绝问题

问题根源

你的代码中,FirebaseClient实例没有附带用户登录后的认证令牌,导致Realtime DB的安全规则无法识别当前已认证的用户,因此触发Permission denied错误。虽然你通过FirebaseAuthProvider完成了登录,但数据库客户端并未关联该登录会话。

修复步骤

  1. 从登录结果authResult中获取用户的认证令牌
  2. 在初始化FirebaseClient时,通过AuthTokenAsync参数注入该令牌

修改后的代码

调整按钮点击事件代码

private async void button_reg_Click(object sender, EventArgs e)
{
    authProvider = new FirebaseAuthProvider(new FirebaseConfig("my_api_key"));

    var authResult = await authProvider.SignInWithEmailAndPasswordAsync("your_email@example.com", "your_password");

    if (authResult != null)
    {
        var user = new Users()
        {
            Address = "Country",
            LastName = "Doe",
            Name = "John"
        };

        // 传入认证令牌初始化FirebaseClient
        var client = new FirebaseClient(
            "my_database_url",
            new FirebaseOptions
            {
                AuthTokenAsync = () => Task.FromResult(authResult.FirebaseToken)
            });

        await client.Child(nameof(Users)).PostAsync(user);
    }    
}

(可选)重构getFirebaseClient方法

如果需要复用客户端实例,可以修改方法接收令牌参数:

private FirebaseClient getFirebaseClient(string authToken)
{
    return new FirebaseClient(
        "my_database_url",
        new FirebaseOptions
        {
            AuthTokenAsync = () => Task.FromResult(authToken)
        });
}

调用时传入authResult.FirebaseToken即可。

验证要点

  • 确认authResult.FirebaseToken不为空:可以在登录后打印该值,确保令牌有效
  • 你的Realtime DB安全规则无需修改:规则要求auth.uid != null,只要客户端带上有效令牌,规则会自动识别用户的uid并允许写入操作

内容的提问来源于stack exchange,提问作者Agus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 08:35:14