【问题标题】:NativeFirebaseError: [storage/unauthorized] User is not authorized to perform the desired actionNativeFirebaseError:[存储/未授权]用户无权执行所需的操作
【发布时间】:2020-04-22 00:39:47
【问题描述】:

我在将图片上传到 Firebase 存储时遇到问题。我正在使用 React Native 的 @react-native-firebase/storage 并且安装和连接似乎都很好,因为我能够很好地引用图像:

const ref = firebase.storage().ref('myImage.png');

问题肯定是基于权限的,因为当我暂时删除时:

: if request.auth != null

来自 Firebase 控制台存储规则:

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}

效果很好:

firebase.storage()
    .ref('images/test.jpg')
    .putFile(myImage[0].path)
    .then((successCb) => {
        console.log('successCb');
        console.log(successCb);
    })
    .catch((failureCb) => {
        console.log('failureCb');
        console.log(failureCb);
    });

那么如何进行身份验证才能安全地使用 putFile?

编辑: 我正在使用“@react-native-firebase/storage”:“^6.2.0”

提前致谢!

【问题讨论】:

  • 所以听起来用户没有登录。您是否使用 Firebase 身份验证登录了用户?如果是这样,smallest standalone script with which you can reproduce the problem 是什么?
  • 谢谢@FrankvanPuffelen!如何登录?我正在使用相同的 react-native-firebase/ 进行分析并且工作正常。你有一个很好的推荐工具来使用第三方模块在线启动一个反应本机应用程序吗?我会尝试在那里为您重新创建它。我没有更改任何默认值,所以我认为安装了 firebase 的普通项目应该会显示错误。
  • “我如何登录?” firebase.google.com/docs/auth 或(因为您使用的是react-native-firebasernfirebase.io/docs/v5.x.x/auth/getting-started

标签: javascript firebase-authentication firebase-storage react-native-firebase react-native-image-picker


【解决方案1】:

就是弗兰克!

我错误地认为应用程序是已经通过 GoogleService-Info.plist 文件进行身份验证的用户,而不是应用程序的用户需要进行身份验证。

我的修复步骤:

  1. 安装@react-native-firebase/auth

  2. 进入 Firebase 控制台的身份验证部分并启用匿名登录方法

  3. 在componentDidMount()中调用firebase.auth().signInAnonymously()

    而且...终于可以成功提交 putFile 到存储了!

非常感谢@FrankvanPuffelen !!

【讨论】:

【解决方案2】:

编辑 Firebase 存储规则以允许上传而无需安装 @react-native-firebase/auth

  1. 导航到 Firebase 控制台
  2. 在开发开放存储下的侧边栏中
  3. 打开规则选项卡
  4. 替换以下规则
rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write
    }
  }
}
  1. 然后发布

完成

【讨论】:

    【解决方案3】:

    我们可以通过两种方式解决这个问题。要么我们需要在将文件上传到数据库时对用户进行身份验证。或者,如果仅出于测试目的,我建议转到 firebase 中的存储并单击规则并将“允许读取,写入:如果 request.auth!= null”更改为“允许读取,写入:如果 request.auth ==空值”。我建议对用户进行身份验证以获得安全可靠的文件。

    希望你的问题解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-29
      • 1970-01-01
      • 1970-01-01
      • 2021-07-15
      • 2012-02-01
      • 1970-01-01
      • 2019-04-22
      • 1970-01-01
      相关资源
      最近更新 更多