在React Native App(通过Expo)中,使用Firestore权限 - 请求



这是我的代码:

firebase.auth().onAuthStateChanged((user) => {
    if (user) {
        console.log("We are authenticated now!");
        firebase.firestore().collection("users")
            .doc(firebase.auth().currentUser.uid).set({ name: "new name" });
    } else {
        loginWithFacebook();
    }
});

,这是我的权限规则:

service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId} {
      allow read, write: if request.auth != null;
    }
  }
}

似乎无论如何,请求。我遇到的错误:

firestore(4.8.0)2017-12-20T04:18:27.321Z [连接]:webChannel 收到的错误:{"代码":403,"消息":"缺失或不足 权限。","状态":" climermission_denied"}

我降级到firebase SDK 4.6.2当我在Expo上遇到此问题时。

另外,您必须这样做才能使一切正常工作:

在您的node_modules/@firebase/webchannel-wrapper/dist/index.js

没有这个,您将从收藏中获得什么。

希望这会有所帮助。

i从浏览器与博览会中运行的相同代码分散了请求。我注意到的一个区别是缺少原始标题。我修补了XHR,它用于我的用途。我不确定这是错误还是预期的行为。我在Slack/Firestore和Discord/React-Native上问过,但没有得到太多输入。

const xhrInterceptor = require('react-native/Libraries/Network/XHRInterceptor')
xhrInterceptor.setSendCallback((data, xhr) => {
  if (xhr._method === 'POST') {
    // WHATWG specifies opaque origin as anything other than a uri tuple. It serializes to the string 'null'.
    // https://html.spec.whatwg.org/multipage/origin.html
    xhr.setRequestHeader('Origin', 'null')
  }
})
xhrInterceptor.enableInterception()

似乎是一个错误 - 就像其他高音用户所经历的那样。找到修复程序时,我会更新。如果有人让它起作用(通过EXPO进行反应),请分享。

对不起,我迟到了聚会,但是我遇到了这个,以为我会分享我的经验。我遇到了完全相同的问题,经过数月的研究和调试,当我升级到Firebase V 5时,它可以解决。这是指向我的SO帖子和解决方案的链接。希望能帮助到你:https://stackoverflow.com/a/51115385/6158840

我通过将firebase版本降低到5.0.0(我使用的6.4版)来解决该问题。希望它可以帮助他人。

  1. 在您的软件包中
dependencies: {
  "firebase": "^5.0.0"
}
  1. 更新依赖项

npm install

首先检查Firebsae规则Exectuion Simulator上的东西,

,其次,您的问题听起来像您的请求不同步,在Web视图中检查您的规则(如果可能的话),因为我尝试执行相同的操作,并且对我有用

    {
      "rules": {
                ".read": "auth != null",
                ".write": "auth != null"
               }
    }

请记录您的UID并确认它不是空的。然后将权限规则修改为 -

// Grants a user access to a document matching their Auth user Id
    service cloud.firestore {
       match /databases/{database}/documents {
         // Collection named "users", document named after the userId
       match /users/{userId} {
         allow read, write: if request.auth.uid == userId;
       }
     }
  }

相关内容

  • 没有找到相关文章

最新更新