为什么 Firebase 电子邮件验证不适用于 Gmail 帐户?

Ana*_*ari 2 firebase firebase-authentication flutter

我正在尝试使用 Firebase 实施电子邮件验证。它不会向诸如sample@gmail.com之类的Gmail地址发送验证电子邮件,但可以与临时邮件等其他电子邮件地址一起正常工作。我在观看 Johannes Milke 的教程时遇到了这个问题。

我无法理解为什么会发生这种情况。请帮忙。

验证页面代码

class VerifyEmailPage extends StatefulWidget {
  const VerifyEmailPage({Key? key}) : super(key: key);

  @override
  State<VerifyEmailPage> createState() => _VerifyEmailPageState();
}

class _VerifyEmailPageState extends State<VerifyEmailPage> {
  bool isEmailVerified = true;
  Timer? timer;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();

    //User need to be created before

    isEmailVerified = FirebaseAuth.instance.currentUser!.emailVerified;
    if (!isEmailVerified) {
      sendVerificationEmail();
      timer = Timer.periodic(const Duration(seconds: 3), (timer) {
        checkEmailVerified();
      });
    }
  }

  Future checkEmailVerified() async {
    FirebaseAuth.instance.currentUser!.reload();
    // user.reload;
    setState(() {
      isEmailVerified = FirebaseAuth.instance.currentUser!.emailVerified;
    });
    if (isEmailVerified) timer?.cancel();
  }

  @override
  void dispose() {
    // TODO: implement dispose
    timer?.cancel();
    super.dispose();
  }

  Future sendVerificationEmail() async {
    try {
      final user = FirebaseAuth.instance.currentUser;
      // await firebase.auth().currentUser.sendEmailVerification();

      await user
          ?.sendEmailVerification()
          .then((value) => print("Verification sent! to ${user.email}"));
    } on Exception catch (e) {
      // TODO
      showErrorAlert(context, e.toString());
    }
  }

  AuthService _auth = AuthService();

  @override
  Widget build(BuildContext context) => isEmailVerified
      ? HomeScreen(selectedIndex: 0)
      : Scaffold(
          appBar: AppBar(
            title: Text("Verify your email"),
            centerTitle: true,
            elevation: 0,
            backgroundColor: kPrimaryColor,
            leading: IconButton(
              icon: Icon(Icons.arrow_back),
              onPressed: () async {
                await _auth.signOut();
              },
            ),
          ),
          body: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            // crossAxisAlignment: CrossAxisAlignment.center,
            children: const [
              Text("Verification email is sent to you!!",
                  // textAlign: TextAlign.center,
                  style: TextStyle(fontSize: 20.0),
                  textAlign: TextAlign.center),
            ],
          ));
}
Run Code Online (Sandbox Code Playgroud)

小智 13

我遇到了同样的问题,我发现验证电子邮件已发送,但 gmail 被视为垃圾邮件。请检查垃圾邮件文件夹

  • 在谷歌上搜索了一整天却找不到答案,终于找到了这个......谢谢。 (2认同)