Flutter:如何收听FirebaseUser是经过电子邮件验证的布尔值?
问题内容:
我的想法: 我想在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
。
我需要做什么?
问题答案:
验证并非如您所愿那样简单。首先,存在识别用户已验证其电子邮件的问题。其次,存在一个问题,您没有可以听的任何通知会自动触发应用程序中的更改。
检查此线程以获取有关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秒钟左右检查一次电子邮件验证。