【问题标题】:Images don't get rendered after page refresh (GET 403 Errors) React and Firebase页面刷新后图像未呈现(GET 403 错误)React 和 Firebase
【发布时间】:2025-11-26 11:40:01
【问题描述】:

我有一个简单的应用程序,用户可以在其中上传图像并查看它们。上传完成后,将显示到 /yourlibrary 的应用程序路由和图像。但是刷新页面时不会显示它们。当用户在应用程序中单击您的图书馆按钮时,第一次单击不执行任何操作,第二次单击检索一些图像但也有许多 GET 403 权限错误。 (如果用户只有 3 张图片,则不会出现这些 GET 403 错误。)

登录的用户为真。抱歉,如果我不能很好地组织我的问题,但我不知道为什么会这样。一旦我更好地理解了这个问题,我将对其进行编辑。

import React, { Component } from 'react'
import firebase from "../firebase/config"
export default class Photos extends Component {
  state={
    photos:[]
  }
  componentDidMount(){
    let images=[]
    firebase.firestore().collection(localStorage.getItem("user_id")).get().then(function(querySnapshot) {
      querySnapshot.forEach(function(doc) {
          let imageData={
            url:doc.data().url,
            created:doc.data().added
          }
          images.push(imageData)

      });
  });
  this.setState({ photos: images });
  }
  render() {
    const items=this.state.photos;

    return (
      <div className="container-fluid pt-3">
        <div className="card-columns">
          {items.map((item)=>(
            <div className="card">
              <img key={item.url} className="card-img-top materialboxed" src={item.url} alt=""/>
            </div>
         ))}
        </div>
      </div>

    )
  }
}

【问题讨论】:

    标签: javascript reactjs firebase google-cloud-firestore


    【解决方案1】:

    this.setState({ photos: images });放错了地方,请检查下面的代码sn-p

    componentDidMount(){
        let images=[]
        firebase.firestore().collection(localStorage.getItem("user_id")).get()
        .then((querySnapshot) => { // <--- To get access to this.state
            querySnapshot.forEach(function(doc) {
                let imageData={
                    url:doc.data().url,
                    created:doc.data().added
                }
                images.push(imageData)
            });
            this.setState({ photos: images }); //<---- it should be here
        });
        // images will not be updated here, due to asynchronous execution
        // this.setState({ photos: images });
    }
    

    【讨论】:

    • 我做了你的建议,但我得到了错误:未处理的拒绝(TypeError):无法读取未定义的属性“setState”
    • @osmancakirio,我认为你没有复制整个代码,这是第二次更改.then((querySnapshot) =&gt; {
    • 啊,非常感谢。现在它显示第一次点击发生的时间。这几乎挽救了我的一天。现在第一次点击有效,但仍然出现 403 错误。有些图片加载有些不加载。
    • 403 Forbidden Error 您可能需要检查来自服务器的访问权限
    • 权限设置为:rules_version = '2';服务 cloud.firestore { match /databases/{database}/documents { match /{document=**} { 允许读取,写入:如果为真; } } }
    最近更新 更多