我正在与Firebase web SDK一起开发Remix应用程序。我正在尝试为我的Firestore数据库编写安全规则,但是我现在撞了我的头一段时间,因为我一直得到"FirebaseError: Missing or sufficifulpermissions";错误,即使我登录(我使用谷歌登录方法)。我使用以下规则:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read: if request.auth != null;
allow write: if request.auth != null;
}
}
}
有什么明显的我忽略了吗?
编辑:
export async function addUser(data: FirebaseUserFields) {
const app =
getApps().length === 0 ? initializeApp(firebaseConfig) : getApp();
const db = getFirestore(app);
await setDoc(doc(db, "users", data.id), data);
}
我有一个在React上下文提供程序中运行signInWithPopup
函数的函数:
const googleLogin = () => {
signInWithPopup(auth, provider)
.then((result) => {
const credential =
GoogleAuthProvider.credentialFromResult(result);
const token = credential?.accessToken;
// The signed-in user info.
return addUser({
id: result.user.uid,
// ... additional data
});
})
.catch((error) => {
setError("Sorry, something went wrong");
});
};
当用户成功登录或已经登录并且触发onAuthStateChanged
功能时,我有以下输出:
{
"uid": "fR58htyWxWhVwUKbKTYYhCMq98f1",
"email": "...",
"emailVerified": true,
"displayName": "...",
"isAnonymous": false,
"photoURL": "https://...",
"providerData": [
{
"providerId": "google.com",
"uid": "104448861784791813612",
"displayName": "...",
"email": "..",
"phoneNumber": null,
"photoURL": "https://..."
}
],
"stsTokenManager": {
"refreshToken": "AOk..",
"accessToken": "ey...",
"expirationTime": 1673043376314
},
"createdAt": "1665760174513",
"lastLoginAt": "1665902371045",
"apiKey": "..",
"appName": "[DEFAULT]"
}
希望这样可以!
我要回复这个最近转发的firebase模拟器身份验证问题,因为我已经浪费了这么多时间试图自己弄清楚它,它不断标记为"已解决";
我终于找到了正确的答案在这个主题的许多线程之一的底部,但是为使用npm
与curl | bash
的人添加了额外的信息(这是世界上最糟糕的做法吗?)安装和评论,并提供了一个链接来帮助您升级Java。
基本上,firebase-tools
缓存模拟器的二进制文件,没有升级工具会解决这个问题。即便如此,您确实需要最新版本的firebase-tools
,因此:
- 卸载
firebase-tools
使用sudo npm uninstall -g firebase-tools -g
或curl -sL firebase.tools | uninstall=true bash
取决于你如何安装它们。(做!享受!) - 使用
sudo npm install -g firebase-tools
重新安装它们(与许多报告相反,这是工作和支持的,不涉及到bash管道) rm -rf ~/.cache/firebase
(对于macos,我不知道在linux或Windows上等效的是什么,或者他们是否甚至有这个问题)- 你可能需要升级Java,因为你当然会(运行
firebase-tools
会告诉你)。
现在启动模拟器套件和firestore请求应该实际工作。