Unity C# WebGL中如何从Firebase实时数据库读取用户UUID
Firebase Realtime Database获取用户UUID返回空的解决方案
核心问题分析
你的代码返回空,大概率是以下几个原因:
- 数据结构不匹配:Firebase Realtime Database中
users节点通常以**键值对(字典)**存储用户UUID(键就是UUID),但你用GetArray<users>尝试按数组解析,导致解析失败返回空。 - 数据库权限限制:当前
idToken对应的用户没有读取users节点的权限。 - 模型类
users定义错误:模型字段和数据库中用户节点的结构不匹配,导致解析失败。
修复方案
方案1:直接提取UUID列表(仅需UUID时用)
修改GetData方法,用Dictionary<string, object>接收数据,提取字典的键(即UUID):
public void GetData() { RestClient.Get<Dictionary<string, object>>(databaseURL + "users.json?auth=" + idToken) .Then(res => { List<string> userUuids = new List<string>(res.Keys); string uuidList = string.Join("\n", userUuids); this.LogMessage("用户UUID列表", uuidList); }) .Catch(err => this.LogMessage("错误", err.Message)); }
方案2:解析完整用户数据(需要用户详情时用)
先确保你的User模型类和数据库中用户节点的字段匹配,比如:
// Models/User.cs public class User { public string name; public string email; // 其他你存储的用户字段 }
然后修改GetData方法,用Dictionary<string, User>接收:
public void GetData() { RestClient.Get<Dictionary<string, User>>(databaseURL + "users.json?auth=" + idToken) .Then(res => { StringBuilder sb = new StringBuilder(); foreach (var kvp in res) { string uuid = kvp.Key; User user = kvp.Value; sb.AppendLine($"UUID: {uuid}, 用户名: {user.name}"); } this.LogMessage("用户数据", sb.ToString()); }) .Catch(err => this.LogMessage("错误", err.Message)); }
额外排查步骤
- 验证数据结构:在浏览器中直接访问
https://xxx.firebaseio.com/users.json?auth=你的有效idToken,查看返回的JSON是数组还是字典,确认结构是否和代码解析方式匹配。 - 检查数据库规则:登录Firebase控制台,进入Realtime Database的「规则」页面,确保规则允许当前用户读取
users节点,比如:{ "rules": { "users": { ".read": "auth != null" // 根据需求调整权限,比如仅管理员可读取 } } } - 确认idToken有效性:打印
idToken值,确保从SignUpData中正确获取,也可以通过Firebase Admin SDK的verifyIdToken接口验证token是否有效。
内容的提问来源于stack exchange,提问作者Savad
相关产品推荐
相关产品推荐

