firebase - 在 Firestore 中设置自定义声明
问题描述
我正在使用 Firebase 身份验证。而且我想使用自定义声明但实际上我没有得到如何实现这一点company id 等于公司 id 保存在文档中。
我发现我们可以将自定义声明用于额外的身份验证目的。它是一个移动应用程序
在手机中,手机通话firebase.auth().signInWithCustomToken(token)
并获取UID
我想知道如何设置自定义声明?通过解码令牌,我们可以获得这样的详细信息
{
"iss": "",
"sub": "",
"aud": "",
"uid": "920",
"iat": 1600950391,
"exp": 1600953991,
"claims": {
"company_id": 29,
"tenant_code": ""
}
}
我想在我的文档上写规则
我试图写这个..但是所有数据都丢失了我登录了一个具有company_id = 29的用户但所有记录都丢失了
我的规则有什么问题?
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /irrig_sets/{irrigrecord} {
allow write : if request.auth.uid != null && request.auth.token.claims.company_id == resource.data.company_id;
allow read: if request.auth.uid != null && request.auth.token.claims.company_id == resource.data.company_id;
}
match /{collectionname}/{ranch} {
allow read, write: if true
&& collectionname!= "irrig_sets";
}
}
}
我不知道我写的这段代码是否完美我真的被这些firebase规则困住了..我的代码有什么问题?我怎样才能写出正确的规则
我想为 irrig_week 中的所有记录提供读写访问权限,其中包含来自索赔的 company_id?
或存在任何替代方法来实现这一目标?
或从请求中获取特定 ID 并检查 id 是否等于来自 irrig_week 的 company_id 并允许访问该唯一公司的任何其他想法?
解决方案
无法直接从您的移动应用程序设置自定义声明。这将是一个安全漏洞,允许用户为自己可能不批准的事情授予权限。
您应该使用Firebase Admin SDK在安全后端设置自定义声明,如文档中所示。如果您没有后端,则需要进行一些设置,并弄清楚如何最好地从您的应用程序中调用它。
推荐阅读
- ruby-on-rails - 如何修复“无法在 Heroku 上部署应用程序”?
- python - 用scrapy爬行 - bson.errors.InvalidDocument:无法编码对象
- racket - DrRacket - 使用 lambda 生成具有相同元素的列表
- rust - 使用 iter.map,为什么闭包可以工作,但直接传递函数却不行?
- javascript - 有没有办法将数据从 javascript 发送到 exe 文件
- c++ - g++ 和 g++14 的未初始化值的差异
- php - WordPress 模板中的 AJAX 在 WordPress 插件类中不起作用
- forms - AEM Forms 将 JEE 升级到 OSGI
- python - 如何在python中使用多个索引同时填充numpy数组
- c# - mysql权限错误。涉及 SELECT 命令