【问题标题】:How can you manually trigger onAuthStateChanged for Firebase Authentication in Flutter?如何在 Flutter 中手动触发 onAuthStateChanged 进行 Firebase 身份验证?
【发布时间】:2019-12-14 08:19:22
【问题描述】:

我有一个围绕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 doesn't get called when email is verified in flutter 类似的问题

我认为一个解决方案是强制注销并登录,但我不知道如何做到这一点 - 例如。第二步,再次登录触发onAuthStateChanged。

  _auth.signOut(); //sign out and immediate sign in
  final FirebaseUser user = await _auth.signIn----( //which signin function? 

【问题讨论】:

  • 您找到解决方案了吗?我在颤振中遇到同样的问题
  • 没有。我最终做的是强迫用户在未经验证的情况下注销。然后在他验证后,他可以再次登录。

标签: firebase flutter firebase-authentication


【解决方案1】:

使用 _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;
    }
  }

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-04
      • 2020-10-21
      • 1970-01-01
      • 2020-05-27
      • 1970-01-01
      • 2021-05-28
      • 2018-10-15
      • 2020-09-17
      相关资源
      最近更新 更多