我目前正在研究如何使用Firebase,但我想不出一种方法来仅更新,删除或读取用户添加的图像(集合)。

这是我的消防站结构: 在此处输入图片说明

这是我使用的安全规则:

match /databases/{database}/documents {
    match /{document=**} {
    function authed(){
        return request.auth != null
    }
    function matchesUser(){
        return request.auth.uid == data.userId
    }
    
    allow read: if authed() && matchesUser(resource.data)
    allow create: if authed() && matchesUser(request.resource.data)
    }
}

当我尝试获取数据/读取图像(集合)时, Uncaught Error in snapshot listener: FirebaseError: Missing or insufficient permissionsUncaught Error in snapshot listener: FirebaseError: Missing or insufficient permissions

这是我尝试从Firestore读取数据的代码

import { useState, useEffect } from 'react'
import {projectFirestore} from '../firebase/firebase'
import {useAuth} from '../contexts/AuthContext'

const useFirestore = (collection) => {
    const [docs, setDocs] = useState([])
    const {currentUser} = useAuth()

    useEffect(() => {
        const unsub = projectFirestore.collection(collection)
        .orderBy('createdAt', 'desc')
        .where("userId", "==", currentUser.uid)
        .onSnapshot((snap) => {
            let documents = []
            snap.forEach(doc => {
                documents.push({...doc.data(), id: doc.id})
            })
            setDocs(documents)
        })
        return () => unsub()
    }, [collection, currentUser])

    return {docs}
}

export default useFirestore

这是我尝试让用户将文件上传到Firebase的代码:

import {useState, useEffect} from 'react';
import {projectStorage, projectFirestore, timestamp} from '../firebase/firebase'
import {useAuth} from '../contexts/AuthContext'

const useStorage = (file) => {
    const [progress, setProgress] = useState(0)
    const [error, setError] = useState(null)
    const [url, setUrl] = useState(null)

    const {currentUser} = useAuth()

    useEffect(() => {
        // references
        const storageRef = projectStorage.ref(file.name)
        const collectionRef = projectFirestore.collection('images')

        storageRef.put(file).on('state_changed', (snap) => {
            let percentage = (snap.bytesTransferred / snap.totalBytes) * 100
            setProgress(percentage)
        }, (err) => {
            setError(err)
        }, async () => {
            const url = await storageRef.getDownloadURL()
            const createdAt = timestamp();
            collectionRef.add({
                url,
                userId: currentUser.uid, 
                createdAt
            })
            setUrl(url)
        })
    }, [file])

    return { progress, error, url }
}

export default useStorage

  ask by Hafizh Farhandika translate from so

本文未有回复,本站智能推荐:

1回复

用户注销“缺少权限或权限不足时,将使用Firebase规则。 错误:缺少权限或权限不足'

错误: '配置文件侦听器出错:缺少权限或权限不足。 错误:缺少权限或权限不足。 我的应用程序是使用Reactjs,Redux,Firebase构建的项目经理。 您能告诉我为什么用户注销时出现此错误以及如何解决吗? 我的规则:
3回复

使用访问规则中的字段写入Firestore时缺少权限或权限不足

尝试写入Firestore时出错。 我试图使用包含用户uid的字段作为我的安全规则。 如果我的Firestore数据库中有数据,则读取规则正常 - 但是当我尝试编写时,我得到: Error: Missing or insufficient permissions. 我写这条规则有
1回复

Firestore权限不足或不足

我收到错误消息:Firebase丢失或权限不足 代码:const demoCollectionRef = this.db.collection('items'); 返回demoCollectionRef.add(item); 我认为此错误是由于angularfire2的.add方法
1回复

Firebase安全规则为Firestore .where()快照引发错误

出现错误: onSnapshot中未捕获的错误:FirebaseError:缺少权限或权限不足。 这是被调用的函数: Firebase安全规则是: 奇怪的是,它仍然正确显示所有内容,只是引发了此错误。 为什么会这样呢? 我会忽略吗?
1回复

Firebase存储项目级别权限

我将文件存储在Firebase存储中,如下所示: 用户具有基于projectId不同权限,并且可以轻松地对数十个(甚至数百个)项目具有一定级别的权限。 对于每个项目,他(她)都被分配一个角色,该角色确定允许哪些操作。 我将这些角色存储在用户的Firestore中,但是在Fireb
2回复

iOS Firebase / Firestore权限被拒绝

我知道这个问题经常被问到,但是提出的解决方案并没有为我解决。 我试图建立一个基本的iOS Firestore应用程序,该应用程序在集合中写入一些文档。 我遵循标准程序,将GoogleService-Info.plist添加到我的项目中,并在启动时调用FirebaseApp.configu
1回复

如何在Firestore上使用具有有限权限的Admin SDK?

我在使用云功能和firestore规则方面遇到了一些麻烦。 我想在Firestore上使用具有有限特权的云功能,并且只提供安全规则中定义的访问权限 它在RTDB上没有问题但在Firestore上没有问题。 我试过这个规则 还有这个 但它仍在写作,而应该是“许可被拒绝
1回复

有没有一种方法可以在不授予用户权限的情况下更新Firestore的文档?

让我更好地解释我的问题,问题措词有点令人困惑。 我希望用户每次在我的网页中单击HTML元素时都更新一个全局“点击”文档。 使用标准功能并通过授予用户更新“点击”文档中内容的权限,这很容易做到。 问题是我不希望用户具有自由更改文档属性的完整权限。 我只想接收点击并更新数据库。 原因是,如果用户可以使用
2回复

Firestore权限

如何配置权限,以便用户只能在拥有所有者的位置读写文件? 我的文档具有称为所有者的顶级属性。 我阅读了这些文档 https://firebase.google.com/docs/firestore/security/secure-data?authuser=0#the_resource
2回复

发布Firestore规则:发生未知错误

在新创建的项目中,我无法发布对Firebase规则的任何更改。 甚至是简单的更改,例如在文件末尾添加换行符或添加空格。 我觉得这可能是Firestore中的错误,但我想先在这里问一下...