首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firebase电话身份验证在Ionic 4中有效,但Firebase权限被拒绝

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

Stack Overflow用户
提问于 2020-08-13 02:42:41
回答 1查看 304关注 0票数 2

使用这个插件@离子型本机/防火墙身份验证/ngx,我可以进行电话身份验证,但是在身份验证之后,我尝试从Firestore (使用angularfirestore)检索数据,我得到了一个FirebaseError: Missing or insufficient permissions.错误。

(一个小小的背景。我正在将一个Ionic v3 (Firebase)应用程序迁移到Ionic v4 (Firestore)。此用户的电话在v3中工作,但在v4中不工作)。

下面是代码的部分

代码语言:javascript
复制
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
    // ...
        });

这是恢复规则..。

代码语言:javascript
复制
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {

    match /{document=**} {

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

..。和Firebase规则

代码语言:javascript
复制
{
  "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成功地实现了消防基地电话吗??我在Stackoverflow中尝试过其他解决方案,但没有成功。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-20 05:48:18

将其作为Community发布,基于来自问题的评论。

解决这个问题的办法似乎是改变签到的方式。正如@ObiE所指出的,他使用了以下方法:

代码语言:javascript
复制
signInCredential = firebase.auth.PhoneAuthProvider.credential(env.verificationId, data.confirmationCode);           

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

而不是以前使用的:

代码语言:javascript
复制
this.firebaseAuthentication.signInWithVerificationId(env.verificationId,data.confirmationCode).then((user)=>{console.log(user)

登录中的此更改对未通过电话进行身份验证的用户有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63387374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档