我正在使用Firebase身份验证。我想使用自定义声明 但实际上我不知道该如何实施 我想用他的company_id详细信息验证登录用户 我所有包含company_id的文档,因此我只希望将用户的公司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";
}
}
}
我不知道我编写的这段代码是否完美 我真的被这些火力基地规则困住了.. 我的代码有什么问题? 我该怎么写正确的规则
我想授予irrig_week中所有具有声明中的company_id的记录的读写访问权限吗?
或存在任何其他方法可以实现这一目标?
或任何其他从请求中获取特定ID并检查该ID是否与irrig_week中的company_id相等并允许访问该唯一公司的想法?
答案 0 :(得分:0)
不能直接在移动应用中设置自定义声明。那将是一个安全漏洞,允许用户为您可能不赞成的事情授予特权。
您应该使用Firebase Admin SDK在安全的后端上设置自定义声明,如documentation所示。如果没有后端,则需要进行一些设置,并弄清楚如何最好地从应用程序中调用它。