Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Firebase Firestore设置为仅允许从单个Unity应用程序读取/写入_Firebase_Unity3d_Google Cloud Firestore_Firebase Security - Fatal编程技术网

将Firebase Firestore设置为仅允许从单个Unity应用程序读取/写入

将Firebase Firestore设置为仅允许从单个Unity应用程序读取/写入,firebase,unity3d,google-cloud-firestore,firebase-security,Firebase,Unity3d,Google Cloud Firestore,Firebase Security,我一直在寻找这个答案有一段时间了,老实说,没有很多Firebase使用Unity教程给出明确的答案 我正在使用Firestore作为Unity应用程序的数据库。我的目标是只允许该应用程序写入/读取该数据库。没有用户登录,因为应用程序对此没有任何用处。就阅读和写作而言,一切都在运转 我的第一个问题是,我需要Firebase身份验证吗?或者,如果应用程序在构建时包含相关的GoogleServices.json(android)和PList(iOS)文件,那么它只能读/写吗?我不希望未经授权的用户访问

我一直在寻找这个答案有一段时间了,老实说,没有很多Firebase使用Unity教程给出明确的答案

我正在使用Firestore作为Unity应用程序的数据库。我的目标是只允许该应用程序写入/读取该数据库。没有用户登录,因为应用程序对此没有任何用处。就阅读和写作而言,一切都在运转

我的第一个问题是,我需要Firebase身份验证吗?或者,如果应用程序在构建时包含相关的GoogleServices.json(android)和PList(iOS)文件,那么它只能读/写吗?我不希望未经授权的用户访问我的数据库,而且我不确定仅仅拥有json和plist文件有多安全

我的第二个问题是。我在数据库中有两个数据节点,一个用于读取,另一个用于向应用程序的普通用户写入。我知道如何制定规则,所以情况就是这样。但我确实需要特殊的执行,比如说我有一个个人应用程序,它应该能够读取本应为只读的节点,并写入本应为只读的节点

那么我需要Firebase身份验证吗?我假设我必须进行读取异常才能在安全规则中使用身份验证

提前感谢您的帮助。

问题1:
如果不希望对数据库进行未经授权的访问,则需要Firebase Auth。幸运的是,Firebase Auth为像您这样的人提供了一项功能,他们不需要让人登录到您的应用程序。它被称为匿名身份验证,其基本工作原理是在应用程序的用户不知道的情况下,在后台登录用户。通过这种方式,您可以限制数据库访问,以便某个用户无法覆盖其他人的数据。您可以阅读有关Unity匿名身份验证的更多信息

问题2:

我不知道你所描述的情况是否像一个管理员案例,作为应用程序管理员,你应该能够读/写不允许正常用户使用的数据库,但如果是这种情况,你可以使用“自定义声明”。对于自定义声明,您将向身份验证令牌添加一个特殊的键值对,然后在安全规则中使用它。您可以阅读有关自定义索赔的更多信息。

谢谢您的快速回复。我让匿名登录开始工作,我想我正确设置了规则

我在Firestore中有一个名为“organizations”的文档,我希望任何登录的用户都能够阅读该文档及其下的所有内容,但只有在其用户id为administrator的情况下才能进行写入。从Firestore文档中,我想我应该设置如下规则:

match /databases/{database}/documents 
  {
    match /organizations/{organization=**}
    {
      allow read: if request.auth != null; 
      allow write: if request.auth.uid == "administrator";
    }
}
我有一个在应用程序开头运行的函数,可以匿名为用户签名,我可以确认该函数是否有效,因为我可以在任务完成时读取用户

然而,在规则中有些东西不起作用

无论我是否登录,应用程序都可以读取Firestore节点。我可以注释掉登录功能,它仍然会读取“组织”节点。我不确定匿名登录是否有任何作用。也许我登录错了

这是我的登录功能:

public async Task SignInAnon()
    {
        await FirestoreController.firebaseAuth.SignInAnonymouslyAsync().ContinueWith(task => 
        {
            if (task.IsCanceled)
            {
                Debug.LogError("SignInAnonymouslyAsync was canceled.");
                return;
            }
            if (task.IsFaulted)
            {
                Debug.LogError("SignInAnonymouslyAsync encountered an error: " + task.Exception);
                return;
            }

            GameManager.anonUser = task.Result;
            Debug.Log("Firebase Signed-In as: " + GameManager.anonUser.UserId);
        });
    }
anonUser是在代码中其他地方启动的静态变量。或者我可以不这样做吗

编辑:我是个白痴。我登录过一次,但我没有费心让用户注销,因此即使我注释掉代码,我也被视为已登录:P

您可以使用专用的“应用程序用户”并将登录硬编码到应用程序=>应用程序本身通过数据库进行身份验证。。。当然,这里的问题是:每个人都可以尝试反编译应用程序,并且可以访问凭据,除非你对其进行了足够的混淆,例如使用一些加密等,因此潜在的黑客在某个时候会放弃。。还是不^^