我的想法: 我想在Flutter中使用Firebase Auth插件注册用户。但是,在他们可以访问该应用之前,他们必须验证其电子邮件地址。因此,我将注册后的Firebase用户推送到验证屏幕。这只是一个加载屏幕,告诉用户他必须验证他的电子邮件。
但是现在: 如果用户的电子邮件经过验证,我如何继续收听并将其发送(如果正确)到主屏幕?
我是Flutter的新手,我不知道是否必须使用Streams或Observables或while循环或setState()或其他某种方式进行布尔检查。而且我也不知道如何设置解决方案。
这是我注册用户的基本代码:
import 'package:cloud_firestore/cloud_firestore.dart'; import 'dart:async'; class AuthService { final FirebaseAuth _auth = FirebaseAuth.instance; final Firestore _db = Firestore.instance; Future<FirebaseUser> get getUser => _auth.currentUser(); Stream<FirebaseUser> get user => _auth.onAuthStateChanged; Future<FirebaseUser> edubslogin(String email, String password) async { try { final FirebaseUser user = await _auth.createUserWithEmailAndPassword( email: email, password: password, ); await user.sendEmailVerification(); //email verification somewhere here updateUserData(user); return user; } catch (error) { print(error); return null; } }
我已经试过了:
if (user.isEmailVerified == true) { //go to Homescreen return true; } else { //show verification screen(loading spinner) return false; }
但是,我没有得到一个布尔值true出来的isEmailVerified。
true
isEmailVerified
我需要做什么?
验证并非如您所愿那样简单。首先,存在识别用户已验证其电子邮件的问题。其次,存在一个问题,您没有可以听的任何通知会自动触发应用程序中的更改。
检查此线程以获取有关emailVerified的信息:https : //github.com/flutter/flutter/issues/20390#issuecomment-514411392
我只有在以下情况下才能验证用户身份:1)创建他们的帐户,2)登录他们,3)然后检查以确保他们验证了他们的电子邮件。
final FirebaseAuth _auth = FirebaseAuth.instance; var _authenticatedUser = await _auth.signInWithEmailAndPassword(email: _email, password: _password); //where _email and _password were simply what the user typed in the textfields. if (_authenticatedUser.isEmailVerified) { //Verified } else { //Not verified }
第2部分:如何让您的应用识别用户已确认其电子邮件?寻找一种触发检查确认功能的方法。一个按钮将很容易。如果您希望它显示为“自动”,那么我想您可以创建一个计时器,每10秒钟左右检查一次电子邮件验证。