问题描述
使用此插件@ 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)
登录中的此更改适用于不通过电话进行身份验证的用户。