firebase - 监听 Firebase 身份验证凭据的变化
问题描述
我正在构建一个应用程序,它要求我使用两种强制方法登录用户,电子邮件和电话号码,因为这两种数据类型对于应用程序的正常运行都至关重要。我已经实现了基于 Firebase 电子邮件密码的身份验证和谷歌登录到我的应用程序以及电话验证。
现在,我已经成功地实现了这两种方法并设法将电话身份验证的凭据与电子邮件链接起来,并且在 firebase 控制台上也可以看到相同的内容,但问题是我没有收到有关身份验证凭据的任何更改的通知。
这是我用来根据状态确定显示哪个页面的代码snapshot.data
return StreamBuilder<FirebaseUser>(
stream: FirebaseAuth.instance.onAuthStateChanged,
builder: (BuildContext context, AsyncSnapshot<FirebaseUser> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting ||
snapshot.connectionState == ConnectionState.none) {
return Scaffold(
body: Center(
child: CircularProgressIndicator(),
),
);
} else {
if (snapshot.hasError) {
return Scaffold(
body: Center(
child: Text("Error signing in. Please try later"),
),
);
} else if (snapshot.hasData) {
print("signInHandler.dart phone: ${snapshot.data.phoneNumber}");
if (snapshot.data.phoneNumber == null) {
return PhoneSignIn();
}
return MyHomePage();
}
return EmailSignIn();
}
},
);
现在我知道根据文档,onAuthStateChanged
只有在有任何登录或注销事件时才会被触发,但是有没有办法知道事件AuthCredentials
已经改变,以便我可以根据数据决定要显示的适当页面?
但是,当我在链接身份验证凭据后热重新加载应用程序时,会显示相应的屏幕,即MyHomePage()
. 在此之前,应用程序PhoneSignIn()
在成功链接凭据后一直只显示屏幕。
使用谷歌的联系人 API 获取电话号码并没有解决我的问题,因为有些谷歌帐户与任何电话号码都没有关联。
如果有人能指出我正确的方向,我将不胜感激。
解决方案
最后,我找不到任何开箱即用的解决方案,不得不使用一堆流和 Bloc 来管理这个状态。
推荐阅读
- json - 跨多个表解析和存储父/子 JSON
- javascript - 如何更新嵌套数组(多反应选择)
- reactjs - 路径必须是字符串。收到未定义
- kubernetes - Kubernetes:将传入流量路由到特定 Pod
- mime-types - 如何使用 com.filenet.wcm.api 更改 Filenet 文档 MimeType
- java - Hashmap 中一个键的值被设置为另一个键的值
- php - 比较字符串并删除部分字符串
- php - 循环遍历目录和子目录
- config - 为网络浏览器设置鱼而不是文本编辑器
- javascript - 在带有 {} 的 map() 中使用时反应不渲染元素