【问题标题】:Firestore C#: Missing or insufficient permissionsFirestore C#:权限缺失或不足
【发布时间】:2019-04-23 15:03:21
【问题描述】:

我目前正在 C# 中探索 Firebase 的 Cloud Firestore,并遇到了在搜索 SO 后无法解决的错误。看来 C# 中 Firestore 的资源相当有限:

"Status(StatusCode=PermissionDenied, Detail=\"Missing or insufficient permissions.\")"

到目前为止我的代码:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello World!");
        Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", "FirebaseCsharpTest.json");

        string project = "MyProjectId";

        FirestoreDb db = FirestoreDb.Create(project);
        Console.WriteLine("Created Cloud Firestore client with project ID: {0}", project);

        AddPerson(db).GetAwaiter().GetResult();

    }

    public static async Task AddPerson(FirestoreDb db)
    {
        CollectionReference collection = db.Collection("users");
        DocumentReference document = await collection.AddAsync(new
        {
            Name = new
            { First = "Ada", Last = "Lovelace" },
            Born = 1815
        });
    }
}

我在 Firebase 控制台上检查了 Firestore 安全规则是否设置为公开(截至目前,为了测试)。我还确保验证 json 文件是从 Google Developer Console 生成的正确文件,如 post 中所建议的那样。

我有什么遗漏吗?

编辑: 我对谷歌云控制台的权限:

【问题讨论】:

  • 我也遇到了同样的问题,你找到解决办法了吗?

标签: c# firebase google-cloud-firestore


【解决方案1】:

请检查您添加的项目 ID。 ProjectID 应该是您的 json 文件中指定的那个。

【讨论】:

  • 谢谢。我传递的是项目名称。
【解决方案2】:

这是 Cloud IAM 问题,而不是安全规则问题。 The C# server client library creates a privileged server environment that doesn't take into account Cloud Firestore security rules.。您的密钥文件的服务帐户似乎没有正确的 IAM 角色,或者您的代码没有找到您的密钥文件。

尝试使用密钥文件的完整路径而不是相对路径。

您也可以尝试按照here 的说明设置新的服务帐户和密钥文件。

另外,请确保您正在更改 project 变量:

string project = "NewFirebaseCsharpTest";

FirestoreDb db = FirestoreDb.Create(project);

【讨论】:

  • 在控制台上我应该注意什么?我按照说明设置新的服务帐户密钥,也尝试了密钥文件的完整路径,但仍然抛出相同的错误。在 IAM 中,我只能看到我的电子邮件和我作为所有者的角色。我错过了什么?
  • 我还在谷歌云控制台上添加了一张图片。请告诉我我错过了什么。谢谢
  • IAM 权限看起来不错。确保使用您的项目 ID 更新 project 变量。更新了我的答案。
  • 我无法使用该 ID,因为它在 Firestore 上不可用。我已经在 Firestore 上使用了 projectId,但仍然无法进一步了解。
【解决方案3】:

将字符串 project 更改为项目的 ID,而不是项目的名称。 Id 可能以名称开头并带有数字后缀。

如果失败,请转到日志资源管理器并查询日志。您将看到一个错误,说明您的权限被拒绝的原因。

出于安全原因,您永远不会从客户端获得足够的信息。谷歌不会告诉试图访问他们不应该访问的东西的人出了什么问题。但是,管理员可以查看另一端的日志,这将记录所有信息。

【讨论】:

    猜你喜欢
    • 2018-09-12
    • 2019-01-06
    • 1970-01-01
    • 2019-02-26
    • 2018-04-25
    • 2019-05-05
    • 2022-01-25
    • 2021-08-24
    • 2020-09-01
    相关资源
    最近更新 更多