首页 > 解决方案 > 如何在 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? 

标签: firebaseflutterfirebase-authentication

解决方案


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;
    }
  }

推荐阅读