Firestore-本地权限-v-生产

时间:2019-05-19 10:19:15

标签: reactjs firebase google-cloud-firestore

我有一个React应用,我正在尝试弄清楚如何在后端使用Firestore。

我有一个规则文件,该文件在本地和生产环境中的内容完全相同。

控制反应是否可以读取用于填充选择选项列表的db集合的规则是:

// abs for codes
match /abs_for_codes/{docId} {
  allow read;
  allow write;
}

当我在本地运行表单时,可以生成存储在Firestore表中的选择选项,作为可以在表单中进行选择的选项。我刚刚部署了实时版本以尝试解决另一个问题,但是现在,我在选择菜单中得到了一个空的选项数组(仅在生产中-本地环境仍将db集合用作选择选项的数组)。

所有Firestore规则都相同。在我部署生产版本之前,已经部署了Firestore规则。

有人知道为什么我可能会在选择菜单中得到一个空数组并显示一条错误消息:

  

未捕获(承诺)FirebaseError:缺少或不足   权限。

错误消息仅在该行之后出现胡言乱语。我不知道什么是块,检查器的“源”选项卡给出了我无法复制的很长的一行。

在“源”选项卡中突出显示的块具有:

function FirestoreError(code, message) {
    var _this = _super.call(this, message) || this;

我看到了这个post。 Google回应说它是一个已知的错误,但已在2017年修复。是否有可能再次出现?

下次尝试

在修复了静态html中的错别字之后,我再次部署,并分别部署了规则以确保它正在更新,现在在生产环境和本地环境中都出现此错误。没有错误消息-您如何解决此问题?

我的表单选择元素具有:

<div className="form-group">
                                        <label htmlFor="fieldOfResearch">
                                        Select your field(s) of research
                                        </label>
                                        <Select
                                            key={`my_unique_select_keyfieldOfResearch`}
                                            name="fieldOfResearch"
                                            isMulti
                                            className={
                                                "react-select-container" +
                                                (errors.fieldOfResearch && touched.fieldOfResearch
                                                ? " is-invalid"
                                                : "")
                                            }
                                            classNamePrefix="react-select"
                                            value={values.fieldOfResearch}

                                            onChange={selectedOptions => {
                                                // Setting field value - name of the field and values chosen.
                                                setFieldValue("fieldOfResearch", selectedOptions)}
                                                }
                                            onBlur={setFieldTouched}
                                            options={options}
                                            />    

                                            {errors.fieldOfResearch && touched.fieldOfResearch && 
                                            <ErrorMessage
                                            name="fieldOfResearch"
                                            component="div"
                                            className="invalid-feedback d-block"
                                        />}
                                        </div>        

从abs_for_codes(这是我的firestore数据库中的一个集合)中填充选择选项。

async componentDidMount() {
    let options = [];
    await fsDB.collection("abs_for_codes").get().then(function (querySnapshot) {
    querySnapshot.forEach(function(doc) {
        console.log(doc.id, ' => ', doc.data());
        options.push({
            value: doc.data().title.replace(/( )/g, ''),
            label: doc.data().title + ' - ABS ' + doc.id
        });
        });
    });
    this.setState({
        options
    });
    }

当我在本地环境中对它进行测试时,一切都很好。规则在已部署的版本中没有什么不同。

我的Firestore规则文件具有:

rules_version = '2';

作为第一行。我刚才添加了它是因为文档说如果您希望子依赖项带有***标记,请这样做。我不使用它,但正在尝试我能找到的所有选择以使某些东西起作用。

0 个答案:

没有答案