仍然出现错误<打开失败:EACCES(权限被拒绝)>。

3

我已经阅读了许多帖子,可以帮助我解决这个问题。

这是此类错误的解决方案。(只需在androidmanifest.xml中插入一行代码)

android:requestLegacyExternalStorage=”true

但在我的情况下,插入并没有起作用。 我现在正在使用React Native开发移动应用程序。 问题出现在我尝试将文件放入Firebase存储时。 当然,我已将那行代码插入到我的androidmanifest.xml文件中。

<application
  android:name=”.MainApplication”
  android:label=”@string/app_name”
  android:icon=”@mipmap/ic_launcher”
  android:roundIcon=”@mipmap/ic_launcher_round”
  android:allowBackup=”false”
  android:theme=”@style/AppTheme”
  android:requestLegacyExternalStorage=”true”
>

以下是构建脚本

buildscript {
ext {
    buildToolsVersion = “29.0.3”
    minSdkVersion = 21
    compileSdkVersion = 29
    targetSdkVersion = 29
    ndkVersion = “20.1.5948944”
    playServicesVersion = “17.0.0”
    androidMapsUtilsVersion = “2.2.3”
}
 …
}

这是上传脚本

// uploads file
const pngRef = storage().ref(avatar/upload.png);
console.log(“pngRef”, pngRef);
await pngRef.putFile(fileUri);
const url = await storage()
  .ref(avatar/upload.png)
  .getDownloadURL();
console.log(“url”, url);

但是错误仍然存在。

open failed: EACCES (Permission denied)

我在我的 Firebase 控制台上收到了警报。

Your project's Cloud Firestore database '(default)' has insecure rules

当然,我已经允许对我的开发进行读写操作。
rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if true;
    }
  }
}

补充说明:这是Firestore规则。奇怪的是,这些项目之前一直运行良好,但突然出现了错误。

rules_version = '2';
  service cloud.firestore {
    match /databases/{database}/documents {
      match /{document=**} {
        allow read, write: if true;
      }
    }
   }

有没有解决方案?这是 Firebase 的错误吗? 如果有人能帮忙,我会很高兴的。


此消息涉及Cloud Firestore,一种文档数据库: "您的项目的Cloud Firestore数据库'(default)'存在不安全的规则"。您在代码中编写的代码和规则与存储文件的Cloud Storage相关。虽然两者都是Google Cloud和Firebase的一部分,但它们彼此之间没有关联,这个消息与您的Storage规则无关。 - Frank van Puffelen
@FrankvanPuffelen。感谢您与我联系,我已经添加了Firestore规则。 - Speeder
正如我所解释的那样,这里涉及到两个完全不同的产品。您现在具体遇到了什么问题呢? - Frank van Puffelen
实际上,我的项目中有许多CRUD操作。错误发生在涉及存储写入的部分。在添加文档照片后,照片应该存储在Firebase存储中。但是出现了错误。过去一切都很好。 如果您不介意,可以通过AnyDesk或TeamViewer教我吗? - Speeder
抱歉使用TeamViewer,我现在有些困惑... - Speeder
显示剩余2条评论
1个回答

0

我在 Firebase 存储中没有真正看到 rules_version 行,但这些默认规则在规则游乐场中有效,因此客户端可能存在问题。

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if true;
    }
  }
}

你可以尝试在代码中加入try-catch语句吗?这样做可能会帮助获取一些额外的调试细节,例如你正在尝试访问的路径。
try {
  const pngRef = storage().ref("avatar/upload.png");
  console.log(“pngRef”, pngRef);
  await pngRef.putFile(fileUri);
  const url = await storage()
    .ref("avatar/upload.png")
    .getDownloadURL();
console.log(“url”, url);
} catch (e) {
  console.log(e)
  // This should contain additional details
}

另外,请尝试像我上面所做的那样在引用路径中添加引号。此外,(可能不是问题)但请确保代码位于异步函数中。如果仍未解决,请在您的问题中添加来自控制台的其他详细信息。


谢谢,@Dharmaraj。我按照您的步骤操作了并找到了错误。您说得对,错误来自客户端,在某些情况下输入值可能为空。非常感谢您。我之前误认为是规则出了问题,但实际上错误出在其他地方。感谢您的指导。祝你有美好的一天。 - Speeder
1
亲爱的大家,请尝试关注引用路径...你需要有耐心才能找到错误。 - Speeder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接