首页 > 解决方案 > 在 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 并允许访问该唯一公司的任何其他想法?

标签: firebasegoogle-cloud-firestorefirebase-authenticationfirebase-security

解决方案


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

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


推荐阅读