Cloud Firestore: request.auth 不断返回"null"



我正在与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模拟器身份验证问题,因为我已经浪费了这么多时间试图自己弄清楚它,它不断标记为"已解决";

我终于找到了正确的答案在这个主题的许多线程之一的底部,但是为使用npmcurl | bash的人添加了额外的信息(这是世界上最糟糕的做法吗?)安装和评论,并提供了一个链接来帮助您升级Java。

基本上,firebase-tools缓存模拟器的二进制文件,没有升级工具会解决这个问题。即便如此,您确实需要最新版本的firebase-tools,因此:

  1. 卸载firebase-tools使用sudo npm uninstall -g firebase-tools -gcurl -sL firebase.tools | uninstall=true bash取决于你如何安装它们。(做!享受!)
  2. 使用sudo npm install -g firebase-tools重新安装它们(与许多报告相反,这是工作和支持的,不涉及到bash管道)
  3. rm -rf ~/.cache/firebase(对于macos,我不知道在linux或Windows上等效的是什么,或者他们是否甚至有这个问题)
  4. 你可能需要升级Java,因为你当然会(运行firebase-tools会告诉你)。

现在启动模拟器套件和firestore请求应该实际工作。

相关内容

  • 没有找到相关文章

最新更新