Firebase 在firestore中设置自定义声明

Firebase 在firestore中设置自定义声明,firebase,google-cloud-firestore,firebase-authentication,firebase-security,Firebase,Google Cloud Firestore,Firebase Authentication,Firebase Security,我正在使用Firebase身份验证。我想使用自定义声明 但事实上,我不明白我该如何实现这一点 我想用登录用户的公司id详细信息对其进行身份验证 我的所有文档都包含公司id,因此我希望为该文档提供任何访问权限,只有用户的公司id等于该公司id时,才会保存在文档中 我发现我们可以将自定义声明用于其他身份验证目的。 它是一个移动应用程序 在手机中,通过手机调用firebase.auth().signInWithCustomToken(token)并获取UID 我想知道如何设置自定义声明? 通过解码令牌

我正在使用Firebase身份验证。我想使用自定义声明 但事实上,我不明白我该如何实现这一点 我想用登录用户的公司id详细信息对其进行身份验证 我的所有文档都包含公司id,因此我希望为该文档提供任何访问权限,只有用户的公司id等于该公司id时,才会保存在文档中

我发现我们可以将自定义声明用于其他身份验证目的。 它是一个移动应用程序

在手机中,通过手机调用firebase.auth().signInWithCustomToken(token)并获取UID

我想知道如何设置自定义声明? 通过解码令牌,我们可以得到如下的详细信息

{
 "iss": "",
 "sub": "",
 "aud": "",
 "uid": "920",
 "iat": 1600950391,
 "exp": 1600953991,
 "claims": {
   "company_id": 29,
   "tenant_code": ""
 }
}
我想在我的文件上写规则

我试着写下这个。。但所有数据丢失我登录了一个公司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中所有记录的读写权限,从索赔中获得公司id

或者存在任何替代方法来实现这一点


或者从请求中获取特定id并检查id是否等于iRig_week提供的公司id并允许访问该唯一公司的任何其他想法?

不能直接从您的移动应用程序设置自定义声明。这将是一个安全漏洞,允许用户为自己授予您可能不批准的事情的权限


您应该使用在安全后端上设置自定义声明,如中所示。如果您没有后端,则需要设置一些内容,并找出从应用程序调用它的最佳方式。

感谢您的重播。。但在解码令牌后,我得到了这个。所以它在身份验证请求中不可用。。我检查了文件。。。