request.auth 在使用模拟器时在 Firestore 规则中为空

request.auth is null in Firestore rules when use Emulator

我正在通过 AngularFireFirebase Emulators 测试 Firestore 规则。
我的firestore rule很简单,只检查用户是否登录。
什么问题是它不允许任何用户到达 Firestore,尽管用户在授权之后。

但当我不使用 Emulator(即使用真正的 Firestore )时,它是允许的。

所以我想知道在使用Emulator时是否有额外的设置? 请帮助我!

浏览器控制台:

core.js:6210 ERROR Error: Uncaught (in promise): FirebaseError: [code=permission-denied]: PERMISSION_DENIED: 
false for 'create' @ L5

我的环境:

我的 Firestore 规则:

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

app.module.ts:

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    AngularFireModule.initializeApp(environment.firebaseConfig),
    AngularFireAuthModule,
    AngularFirestoreModule,
  ],
  providers: [
    { provide: USE_AUTH_EMULATOR, useValue: environment.useEmulators ? ['localhost', 9099] : undefined },
    { provide: USE_DATABASE_EMULATOR, useValue: environment.useEmulators ? ['localhost', 9000] : undefined },
    { provide: USE_FIRESTORE_EMULATOR, useValue: environment.useEmulators ? ['localhost', 8080] : undefined },

  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

app.component.html:

<button (click)="onLoginButtonClick()">change status(current: {{status}})</button><br>

app.component.ts:

export class AppComponent {
  status = 'not logged in';
  
  constructor(
    private afAuth: AngularFireAuth,
    private afStore: AngularFirestore
  ) {
    this.afAuth.authState
      .subscribe((user) => {
        if ( user != null ) {
          // If user logged in, then add new data.
          this.afStore
            .collection('test_data')
            .doc(user.uid)
            .set({data: 'test data'}); // this causes error!
        }
      });
  }
  async onLoginButtonClick(): Promise<void>{
    if ( this.status === 'not logged in'){
      const provider = new firebase.auth.GoogleAuthProvider();
      await this.afAuth.signInWithPopup(provider);
      this.status = 'logged in';
    }
    else{
      await this.afAuth.signOut();
      this.status = 'not logged in';
    }
  }
}

毕竟,我尝试升级firebase-tools,它的版本从9.8变成了9.10,然后我的问题就解决了。 我发现了这个 issue,它似乎是 Firebase Emulator 的问题。 谢谢