一尘不染

Flutter:如何收听FirebaseUser是经过电子邮件验证的布尔值?

flutter

我的想法: 我想在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

我需要做什么?


阅读 247

收藏
2020-08-13

共1个答案

一尘不染

验证并非如您所愿那样简单。首先,存在识别用户已验证其电子邮件的问题。其次,存在一个问题,您没有可以听的任何通知会自动触发应用程序中的更改。

检查此线程以获取有关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秒钟左右检查一次电子邮件验证。

2020-08-13