firebase - 如何在 Flutter 中手动触发 onAuthStateChanged 进行 Firebase 身份验证?
问题描述
我有一个围绕StreamBuilder
监听构建的应用程序FirebaseAuth.instance.onAuthStateChanged
return new StreamBuilder<FirebaseUser>(
stream: FirebaseAuth.instance.onAuthStateChanged,
builder: (BuildContext context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) { ...
我正在尝试重新加载用户并在验证电子邮件时使用 onAuthStateChanged 来接听。User.reload() 对于StreamBuilder
. 这与在颤振中验证电子邮件时不会调用 onAuthStateChanged类似的问题
我认为一个解决方案是强制注销和登录,但我不知道如何做到这一点 - 例如第 2 步,再次登录以触发 onAuthStateChanged。
_auth.signOut(); //sign out and immediate sign in
final FirebaseUser user = await _auth.signIn----( //which signin function?
解决方案
Use _auth.userChanges() stream instead of _auth.onAuthStateChanges()
return StreamBuilder(
stream: _auth.userChanges(),
builder: (ctx, userSnapshot) {
User? user = _auth.currentUser;
if (userSnapshot.hasData && user != null && user.emailVerified) {
// load screen on successful login
}
// fallback to auth screen
},
);
and on successful verification call refreshToken in your verification method
Future<void> verifyEmail() async {
user = _auth.currentUser;
await user!.reload();
if (user!.emailVerified) {
setState(() {
_isEmailBeingVerified = false;
});
user!.refreshToken;
}
}
推荐阅读
- ios - 在 Swift 中请求时具有未知内容的本地通知
- php - 作曲家没有自动加载某些包的问题
- google-chrome - Chrome 无头立即退出 --repl 标志
- vim - 为什么将命令窗口高度设置为 2 行,避免许多不得不“按”的情况
接着说”? - autoit - 自动日期重新格式化
- c - 即使在设置 PATH 变量之后,“gcc 无法识别”。剩下什么?
- r - 循环遍历列和数据框以聚合 R 中的数据
- html - HTML 电子邮件图像
- excel - 如何使用 IF 或 IFNA 或 OR 从多个列中获取值?
- c# - 如何使用 OnExceptionAspect 返回 ActionResult
>