C# WinForms中Firebase Auth登录后Realtime DB权限拒绝问题求助
解决方案:Firebase Realtime DB 写入权限拒绝问题
问题根源
你的代码中,FirebaseClient实例没有附带用户登录后的认证令牌,导致Realtime DB的安全规则无法识别当前已认证的用户,因此触发Permission denied错误。虽然你通过FirebaseAuthProvider完成了登录,但数据库客户端并未关联该登录会话。
修复步骤
- 从登录结果
authResult中获取用户的认证令牌 - 在初始化
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
相关产品推荐
相关产品推荐

