在Firestore中设置自定义声明

时间:2020-09-25 14:40:00

标签: firebase google-cloud-firestore firebase-authentication firebase-security

我正在使用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相等并允许访问该唯一公司的想法?

1 个答案:

答案 0 :(得分:0)

不能直接在移动应用中设置自定义声明。那将是一个安全漏洞,允许用户为您可能不赞成的事情授予特权。

您应该使用Firebase Admin SDK在安全的后端上设置自定义声明,如documentation所示。如果没有后端,则需要进行一些设置,并弄清楚如何最好地从应用程序中调用它。