我目前正在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安全规则已设置为public(到目前为止,出于测试目的)。我还确保按照本post中的建议,认证json
文件是从Google Developer Console生成的正确文件。
有什么我想念的吗?
答案 0 :(得分:0)
这是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);
答案 1 :(得分:0)
将字符串 project
更改为项目的 Id 而不是项目的名称。 Id 可能以名称开头并带有数字后缀。
如果失败,请转到日志资源管理器并查询日志。您会看到一个错误,说明您的权限被拒绝的原因。
出于安全原因,您永远不会从客户端获得足够的信息。谷歌不会告诉试图访问某些他们不应该访问的东西的人出了什么问题。但是,管理员可以查看另一端的日志,该日志会记录所有信息。
答案 2 :(得分:-1)
请检查您已添加的projectID。 ProjectID应该是您的json文件中指定的那个。