这是我的代码:
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;
}
}
}
似乎无论如何,request.auth始终为null。 我得到的错误:
Firestore(4.8.0)2017-12-20T04:18:27.321Z [连接]:WebChannel 收到错误:{"代码":403,"消息":"遗失或不足 权限""状态":" PERMISSION_DENIED"}
答案 0 :(得分:3)
当我在Expo上遇到最新的Firebase JS SDK问题时,我降级到Firebase SDK 4.6.2。
此外,您必须执行此操作才能使一切正常工作:
超过node_modules/@firebase/webchannel-wrapper/dist/index.js
如果没有这个,你将从你的收藏中得不到任何东西。
希望这有帮助。
答案 1 :(得分:3)
我将来自浏览器vs expo中运行的相同代码的请求区分开来。我注意到的一个区别是缺少Origin标头。我修补了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()
答案 2 :(得分:1)
似乎是一个错误 - 正如其他高信誉用户所经历的那样。当我们找到修复程序时,我会更新更新。如果有人让它工作(通过世博会反应原生)请分享。
答案 3 :(得分:0)
对不起,我参加聚会很晚,但是我碰到了这一点,以为我会分享我的经验。我遇到了完全相同的问题,经过几个月的研究和调试,当我升级到Firebase v 5时,问题得以解决。这是我的SO帖子和解决方案的链接。希望能帮助到你: https://stackoverflow.com/a/51115385/6158840
答案 4 :(得分:0)
我通过将Firebase版本降级到5.0.0(我使用的是6.4版本)解决了该问题。希望它可以帮助其他人。
dependencies: {
"firebase": "^5.0.0"
}
npm install
答案 5 :(得分:-1)
首先检查FIREBSAE规则Exectuion模拟器上的东西,
其次,您的问题听起来像您的请求未同步, 检查你的规则(如果可能的话)在Web视图中,因为我尝试做同样的事情并且它对我有用
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
答案 6 :(得分:-1)
请记录您的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;
}
}
}