firebase错误:FirebaseError:权限缺失或不足

chi*_*n14 8 firebase-security reactjs expo google-cloud-firestore

所以我突然出现了这些错误,我昨天使用了代码,一切都很好。

\n

这就像一个社交媒体平台,昨天我可以显示帖子,今天却不能。我仍然可以拍照并将其保存在 Firebase DB 中,工作正常,但它不会将其自身发布到 Feed 中。

\n

在此输入图像描述

\n

在此输入图像描述

\n

这是代码:

\n
function Profile(props) {\n  const classes = useStyles();\n  const [reason, setReason] = React.useState(\'\');\n  const [open, setOpen] = React.useState(false);\n\n  const handleChange = (event) => {\n    setReason(event.target.value);\n  };\n\n  const handleClose = () => {\n    setOpen(false);\n  };\n\n  const handleOpen = () => {\n    setOpen(true);\n  };\n\n\n  const [userPosts, setUserPosts] = useState([]);\n  const [user, setUser] = useState(null);\n  const [following, setFollowing] = useState(false)\n  useEffect(() => {\n    const { currentUser, posts } = props;\n    console.log({ currentUser, posts });\n\n    if (props.route.params.uid === firebase.auth().currentUser.uid) {\n      setUser(firebase.auth().currentUser);\n      setUserPosts(posts);\n    }else{\n            firebase.firestore()\n            .collection("users")\n            .doc(props.route.params.uid)\n            .get()\n            .then((snapshot) =>{\n                if(snapshot.exists){\n                    setUser(snapshot.data())\n                }else{\n                    console.log(\'does not exist\')\n            }\n        })\n        firebase.firestore()\n        .collection("posts")\n        .doc(props.route.params.uid)\n        .collection("userPosts")\n        .orderBy("creation", "asc")\n        .get()\n        .then((snapshot) =>{\n            let posts = snapshot.docs.map(doc => {\n                const data = doc.data();\n                const id = doc.id;\n                return{id, ...data}\n      })\n      setUserPosts(posts)\n      })\n    }\n    if(props.following.indexOf(props.route.params.uid) > -1){\n        setFollowing(true);\n    }else{\n        setFollowing(false)\n    }\n  },[props.route.params.uid, props.following]);\n\n\n  const onFollow = () =>{\n      firebase.firestore()\n      .collection("following")\n      .doc(firebase.auth().currentUser.uid)\n      .set({\n        following : [props.route.params.uid]\n      })\n  }\n\nconst onLogout = () =>{\n    firebase.auth().signOut();\n}\n\n\n\n  if (user === null) {\n    return <View />;\n  }\n  return (\n    <div className={classes.div}>\n      <div  >\n            <Avatar alt="Ana P\xc3\xa4dagogin" className={classes.avatar} />\n            <Typography className={classes.text} > {user.name}  </Typography>\n            <Typography className={classes.text} > {user.email} </Typography>\n            {props.route.params.uid !== firebase.auth().currentUser.uid ? (\n        \n          <Container> \n              {following ? (\n                <Button\n                  className={classes.btn}\n                  size="large"\n                  variant="outlined"\n                  onClick={() => onUnFollow()}\n                >Following</Button>\n               ) : \n               (\n                 <Button\n                 className={classes.btn}\n                 size="large"\n                 variant="outlined"\n                 onClick={() => onFollow()}\n               >Follow</Button>\n               )}\n           </Container>\n            ) : <Button\n              className={classes.btn}\n              size="large"\n              variant="outlined"\n              onClick={() => onLogout()}\n          >Logout</Button>}\n      \n      <Card>\n      {/* //Versp\xc3\xa4tung */}\n        <CardContent>\n              <Typography variant="h5" className={classes.cardTyp}> Versp\xc3\xa4tung </Typography>\n              <Container className={classes.cardContainer}>\n              <TextField\n                id="time"\n                label="Zeit"\n                type="time"\n                className={classes.cardTime}\n                defaultValue="07:30"\n                InputLabelProps={{\n                   shrink: true,\n              }}\n                inputProps={{\n                  step: 300, // 5 min\n              }}\n      />\n      <Button className={classes.cardBtn}>Absenden</Button>\n      </Container>\n        </CardContent>\n\n        {/* //Krankenmledungen */}\n        <CardContent className={classes.cardKrankmeldung}>\n              <Typography variant="h5" className={classes.cardTyp}> Krankenmledungen </Typography>\n              <Container className={classes.cardContainer}>\n              <TextField\n                id="date"\n                label="Von"\n                type="date"\n                defaultValue="2017-05-24"\n                className={classes.textField}\n                InputLabelProps={{\n                  shrink: true,\n                }}\n              />\n\n              <TextField\n                  id="date"\n                  label="bis"\n                  type="date"\n                  defaultValue="2017-05-24"\n                  className={classes.textField}\n                  InputLabelProps={{\n                    shrink: true,\n                  }}\n                />\n      \n        </Container>\n        <Button className={classes.cardBtn}>Absenden</Button>\n        </CardContent>\n\n        {/* //Versp\xc3\xa4tung Abolung*/}\n        <CardContent>\n              <Typography variant="h5" className={classes.cardTyp}> Versp\xc3\xa4tung Abholung</Typography>\n              <Container className={classes.cardContainer}>\n              <TextField\n                id="time"\n                label="Zeit"\n                type="time"\n                defaultValue="07:30"\n                InputLabelProps={{\n                   shrink: true,\n              }}\n                inputProps={{\n                  step: 300, // 5 min\n              }}\n      />\n      <Button className={classes.cardBtn}>Absenden</Button>\n      </Container>\n        </CardContent>\n      </Card>\n      </div>\n    </div>\n)\n    }\n\nconst mapStateToProps = (store) => ({\n  currentUser: store.userState.currentUser,\n  posts: store.userState.posts,\n  following: store.userState.following\n});\n\nexport default connect(mapStateToProps, null)(Profile);\n
Run Code Online (Sandbox Code Playgroud)\n

Hes*_*uew 15

正如 Frank van Puffelen 指出的那样,您的问题在于 Firebase Firestore 安全规则。
如果您可以在数据库上保存帖子,则似乎您对该集合具有写入权限,但没有读取权限。
您可以通过首先启用对该集合的所有读取和写入来测试更改安全规则如何影响此问题

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /yourCollectionName/{ID}{
        allow read, write: if true; 
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

,然后根据需要限制集合。

检查这些指南,将所需的修改和最佳实践应用于您的安全规则。
https://firebase.google.com/docs/firestore/security/get-started
https://firebase.google.com/docs/firestore/security/rules-struct