如何在Flutter中手动触发onAuthStateChanged进行Firebase身份验证?

时间:2019-08-06 18:11:10

标签: firebase flutter firebase-authentication

我有一个基于StreamBuilder构建的应用程序,用于监听FirebaseAuth.instance.onAuthStateChanged

  return new StreamBuilder<FirebaseUser>(
  stream: FirebaseAuth.instance.onAuthStateChanged,
  builder: (BuildContext context, snapshot) {
    if (snapshot.connectionState == ConnectionState.waiting) { ...

我正在尝试重新加载用户,并在验证电子邮件后使用onAuthStateChanged进行提取。 {。{1}}中的User.reload()不足。这与此onAuthStateChanged doesn't get called when email is verified in flutter

类似

我认为解决方案是强制注销和登录,但是我对如何做到这一点迷惑不解-例如步骤2,再次登录以触发onAuthStateChanged。

StreamBuilder

2 个答案:

答案 0 :(得分:0)

您是否尝试过刷新身份验证令牌?

https://firebase.google.com/docs/auth/admin/manage-sessions

答案 1 :(得分:0)

使用 _auth.userChanges() 流代替 _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
  },
);

并在您的验证方法中成功验证调用 refreshToken

Future<void> verifyEmail() async {
    user = _auth.currentUser;
    await user!.reload();
    if (user!.emailVerified) {
      setState(() {
        _isEmailBeingVerified = false;
      });
      user!.refreshToken;
    }
  }