Firebase phone 身份验证在 Ionic 4 中有效,但 Firebase 权限被拒绝

Firebase phone authentication works in Ionic 4, but Firebase permission denied

使用这个插件@ionic-native/firebase-authentication/ngx,我能够进行 phone 身份验证,但是在身份验证之后,我尝试从 Firestore 检索数据(使用 angularfirestore),我得到了 FirebaseError: Missing or insufficient permissions.错误。

(一点背景故事。我正在将 Ionic v3 (Firebase) 应用程序迁移到 Ionic v4 (Firestore)。此用户的 phone 身份验证适用于 v3,但不适用于 v4)。

这是部分代码

import { FirebaseAuthentication } from '@ionic-native/firebase-authentication/ngx'; import { Query, AngularFirestore } from '@angular/fire/firestore';
    //...
    constructor(private afs: AngularFirestore,
        private firebaseAuthentication: FirebaseAuthentication )
    //...
    this.firebaseAuthentication.onAuthStateChanged().subscribe((user)=>{
          console.log(user);// This correctly shows the user object
          //...
    const snapshot = await this.afs.collection(collection).doc(user.uid).ref.get(); // <-- Permissions error
    // ...
        });

这是 Firestore 规则...

rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {

    match /{document=**} {

      allow read, write: if request.auth.uid != null;
    }
  }
}

...和 ​​Firebase 规则

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null",
      "quotes": {
      ".indexOn": ["businessprofile_id","request_id"]
    },
      "quotes-by-business-profile": {
      ".indexOn": ["request_id"]
    },
      "businessprofiles": {
        "$userid":{
           ".indexOn": ["status"]
          ,".read": "auth.uid == $userid || auth.userId == $userid",
                 ".write": "auth.uid == $userid || auth.userId == $userid"
        
          }   
    },
      "requests": {
        "$requestid":{
            ".indexOn": ["userid", "category", "status"]
        },
          ".indexOn": ["userid", "status", "accepted_businessprofile_id"]
    },
      "users" : {
        "$users" : {
          ".read": "auth.uid == $users || auth.userId == $users",
                ".write": "auth.uid == $users || auth.userId == $users"
        }
      },
      "messages" : {
        ".indexOn" : ["request_id", "businessprofile_userid", "userid","businessprofile_id"]
      },
      "businesslocations" : {
        ".indexOn": "g"
      },
      "countries" :
      {
        ".read": true
      }
  }
}

有人用 Ionic 4 成功实现了 firebase phone 身份验证吗??我在 Whosebug 中尝试过其他解决方案,但没有成功。

谢谢。

根据问题的评论将此作为社区 wiki 发布。

看来解决问题的方法是改变登录方式。正如@ObiE 指出的那样,他使用了以下方法:

signInCredential = firebase.auth.PhoneAuthProvider.credential(env.verificationId, data.confirmationCode);           

firebase.auth().signInWithCredential(signInCredential).then((success) => {
...

而不是之前使用的:

this.firebaseAuthentication.signInWithVerificationId(env.verificationId,data.confirmationCode).then((user)=>{console.log(user)

登录中的此更改适用于未通过 phone 进行身份验证的用户。