Firebase电话身份验证可在Ionic 4中使用,但Firebase权限被拒绝

问题描述

使用此插件@ ionic-native / firebase-authentication / ngx,我可以进行电话身份验证,但是在身份验证之后,我尝试从Firestore(使用angularfirestore)检索数据,我得到了{{1 }}错误。

(有点背景知识。我正在将Ionic v3(Firebase)应用程序迁移到Ionic v4(Firestore)。此用户的电话身份验证在v3中可用,但在v4中不可用。)

这是代码的一部分

FirebaseError: Missing or insufficient permissions.

这是Firestore规则...

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
    // ...
        });

...以及Firebase规则

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

    match /{document=**} {

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

有没有人用Ionic 4成功实现了Firebase电话认证?我在Stackoverflow中尝试了其他解决方案,但没有运气。

谢谢。

解决方法

根据问题的评论,将其发布为Community 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)

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...