firebase - 带有自定义声明的简单访问控制 Firebase 实时数据库不起作用
问题描述
firebase 项目的所有用户都使用电话提供商进行身份验证。
我正在为所有使用 C# 的用户设置自定义声明,如下所示 -
var claims = new Dictionary<string, object>()
{
{ "admin", true },
};
var pagedEnumerable = FirebaseAuth.DefaultInstance.ListUsersAsync(null);
var responses = pagedEnumerable.AsRawResponses().GetAsyncEnumerator();
while (responses.MoveNextAsync().Result)
{
ExportedUserRecords response = responses.Current;
foreach (ExportedUserRecord user in response.Users)
{
FirebaseAuth.DefaultInstance.SetCustomUserClaimsAsync(user.Uid, claims);
}
}
在 firebase 实时数据库中,我有以下节点 -
{
"Configuration" : {
"Sync" : "XYZ"
},
"adminContent" : {
"key" : "val1"
}
}
我正在尝试使用自定义声明配置数据库访问规则 -
{
"rules": {
"adminContent": {
".read": "auth.token.admin === true",
".write": "auth.token.admin === true"
}
}
}
我正在尝试使用规则游乐场来验证对 adminContent 节点的读取访问权限并收到错误为 -
结果弹出显示为 -
请求 - 类型读取 Location /adminContent Data null Auth { "provider": "anonymous", "uid": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" } Admin false
响应 - READ Denied 第 5 行 (/adminContent) 读取:“auth.token.admin === true”
使用 C# 代码,我已验证用户上存在管理员自定义声明。
有人会帮助解决这个错误吗?
解决方案
Firebase 控制台中的规则游乐场不会读取现有用户的任何个人资料信息。如果您想测试在用户拥有admin
声明时是否允许读取,您需要通过选择Custom提供程序在规则游乐场中指定该声明,然后编辑Auth token payload以包含它。
另请参阅:Firestore 在线规则模拟器失败并出现自定义声明,我刚刚发现它实际上会将您的问题作为重复项关闭。
推荐阅读
- powershell - 我可以更改 Out-GridView 的按钮名称吗?
- node.js - 我如何在 express 中导入 react 。在进行反应服务器端渲染时
- windows - IF 多个条件
- python - glm.project() 函数显示错误,即使参数类型正确
- c++ - atan2 是否需要归一化向量?向量之间的角度使用 acos 或 atan 哪个更好?
- python - 当重定向的 URL 出现 DNS 外观错误时,如何抓取 URL?
- java - java - 如何在java spring中从Long字段的值中删除L
- react-native - 为什么我的应用程序在调试模式下完美运行而在发布模式下崩溃?
- jms - jms容器的并发最优值
- google-cloud-platform - 在 PubSub 主题上使用 Cloud Run