React Native 获取错误:Firestore:调用方没有执行指定操作的权限,但我已登录

ndasle7k  于 2023-01-18  发布在  React
关注(0)|答案(8)|浏览(138)

我有这个问题,并试图修复与所有的解决方案,我已经找到,但仍然不工作。我的规则在firebase云firestore是:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write : if auth != null ;
    }
  }
}

并且我已经启用了匿名登录方式。
安卓
android/build.gradle

classpath 'com.android.tools.build:gradle:3.1.3'
        classpath 'com.google.gms:google-services:4.0.1'

android/app/build.gradle

compile project(':react-native-firebase')
    compile project(':react-native-fbsdk')
    implementation project(':react-native-firebase')
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
    implementation "com.facebook.react:react-native:+"  // From node_modules

    implementation 'com.google.firebase:firebase-core:16.0.4'
    implementation 'com.google.firebase:firebase-auth:16.0.4'
    implementation 'com.google.firebase:firebase-firestore:17.1.0'

Testing.js

firebase.auth().signInAnonymously().then(()=>{
        firebase.app().firestore().collection('Hello').doc('hello').set({
          id:'fadsa'
        }).catch((err)=>{
          alert(err);
        })
      })
wwwo4jvm

wwwo4jvm1#

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

对此进行更改

rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
 match /{document=**} {
  allow read, write: if request.auth != null;
  }
 }
}
1cosmwyk

1cosmwyk2#

这是一个问题,因为您的数据库目前的规则。请检查两个数据库,实时和Firestore。
一般来说,拥有完整的安全规则或RD或CF逻辑不完全理解的任何其他规则每次都会导致错误。

> // Full security
> 
> {   "rules": {
>     ".read": false,
>     ".write": false   } }

在Firestore中,您可以按以下方式进行配置:

> service cloud.firestore {   match /databases/{database}/documents {
>     match /{document=**} {
>       allow read: if auth != null;
>       allow write: if auth != null;
>     }   } }

有关更多示例,请参见:https://gist.github.com/codediodeio/6dbce1305b9556c2136492522e2100f6https://firebase.google.com/docs/database/security

zbsbpyhn

zbsbpyhn3#

如果你不使用认证在你的应用程序,只使用Firebase Firestore.所以你可以改变它简单地像这样.

更改此项

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

变成这样

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

最后,不要忘记发布这些更改以保存它。

如果已通过时间戳指定

如果您已经通过时间戳指定了Firestore规则,那么只需增加持续时间的长度。

rules_version = '2';
service cloud.firestore {
 match /databases/{database}/documents {
 match /{document=**} {
  allow read, write: if
    request.time < timestamp.date(2023, 3, 14);;
   }
  }
 }

**注意:**这只是为了练习和使用Firestore数据。如果你想构建一个生产级的应用程序,那么一定要安全地定义你的Firestore规则。

xdyibdwo

xdyibdwo4#

我在Android Stuido上的flutter应用程序也出现了同样的错误,当我检查规则时,我看到允许读写操作有时间限制。所以我只是延长了时间段,如下所示:

rules_version = '2';

service cloud.firestore {

match /databases/{database}/documents {

match /{document=**} {

  allow read, write: if

      request.time < timestamp.date(2022, 9, 29);

}

}

}
ctehm74n

ctehm74n5#

我只想补充一点,如果您在Firebase中启用了“App check”并强制检查App check令牌,但请求中缺少令牌,也可能发生此错误。

在这种情况下,您需要添加插件firebase_app_check

ozxc1zmp

ozxc1zmp6#

需要指出的是,如果您有一个函数在您注销后运行(可以是周期性的),也会发生这种情况。

col17t5w

col17t5w7#

我有同样的错误,我挣扎了很多,因为我错过了“没有应用程序检查令牌的请求。”警告。
如果您在应用程序检查时强制执行Cloud Firestore,则必须配置、取消强制执行或添加令牌。[firebase appcheck]

ltqd579y

ltqd579y8#

在Firestore控制台更新你的规则文件。设置读写权限为真。

相关问题