如何解决如果用户使用电话认证登录,是否可以进行用户管理?
- readData - 读取 FirebaseFirestore 中的可用数据。
- saveUserInfoToFirebase - 在 FirebaseFirestore 中为新注册用户创建数据。
我的问题是在使用 Firebase 电话身份验证时如何管理这两种方法。
void signInWithPhoneAuthCredential(
PhoneAuthCredential phoneAuthCredential) async {
setState(() {
showLoading = true;
});
try {
final authCredential =
await _auth.signInWithCredential(phoneAuthCredential);
setState(() {
showLoading = false;
});
final QuerySnapshot result =
await FirebaseFirestore.instance.collection("userPhone").get();
final List<DocumentSnapshot> documents = result.docs;
documents.forEach((element) {
print(element.id.toString());
});
if (authCredential.user != null) {
documents.firstWhere((element) {
if (element.id.toString() == authCredential.user.uid) {
readData(authCredential.user).then((value) {
Navigator.pop(context);
Navigator.push(context,MaterialPageRoute(builder: (context) => MyHomePage()));
});
}
},orElse: () {
saveUserInfoToFirestore(authCredential.user).then((value) {
Navigator.pop(context);
Navigator.push(
context,MaterialPageRoute(builder: (context) => MyHomePage()));
});
});
}
} on FirebaseAuthException catch (e) {
setState(() {
showLoading = false;
});
_scaffoldKey.currentState
.showSnackBar(SnackBar(content: Text(e.message)));
}
}
我现在面临的问题是,我的方法在注册新用户时不会在我的集合中创建新文档,而当我注册具有不同凭据的新用户时,它会读取现有文档的数据。
>解决方法
if ((documents.singleWhere((element) => element.id.toString() == firebaseUser.uid,orElse: () => null)) !=
null) {
readData(firebaseUser).then((value) {
Navigator.pop(context);
Navigator.push(
context,MaterialPageRoute(builder: (context) => MyHomePage()));
});
} else {
saveUserInfoToFirestore(firebaseUser).then((value) {
readData(firebaseUser).then((value) {
Navigator.pop(context);
Navigator.push(
context,MaterialPageRoute(builder: (context) => MyHomePage()));
});
});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。