首页 文章

Flutter Firebase身份验证currentUser()返回null

提问于
浏览
0

这是关于Flutter Firebase身份验证插件 .
我在创建新用户后尝试发送验证电子邮件,但sendEmailVerification()在内部使用currentUser() . 这看起来像是一个bug,但为了以防万一,我向stackoverflow发布了一个问题 . Android和IOS上的错误是相同的 .

前两行返回FirebaseUser . 第三个返回null . 第四,如果第三个被注释,则抛出一个空引用错误 .

谢谢,
鲍里斯

user = await _auth.createUserWithEmailAndPassword(email: email, password: password); 
// result is FirebaseUser
user = await _auth.signInWithEmailAndPassword(email: email, password: password);
// result is FirebaseUser    
user = await _auth.currentUser();
// result is null    
await user.sendEmailVerification();
//null reference, because it internally uses .currentUser()

2 回答

  • 2

    这是我发现的,我不确定它是否仍然是一个错误,但有一种方法可以使它工作 . 由signInWithEmailAndPassword返回的FirebaseUser未经过真正的身份验证 . 只有onAuthStateChanged流返回的用户才是 . 所以,如果你从onAuthStateChanged上下文调用user.sendEmailVerification(),那么一切都很好 .

    这将有效:

    _firebaseUserChanged = _auth.onAuthStateChanged.listen((FirebaseUser user) {
        if (user != null && !user.isEmailVerified) {
            user.sendEmailVerification(); 
       }
    });
    

    当然,这个代码是简化的 . 我们不希望在每次登录尝试时都发送验证邮件 .

  • 0

    查看firebase_auth代码,我看到 signInWithEmailAndPassword 确实实例化并返回一个用户 . 那可能是你需要用来调用 sendEmailVerification 的用户 .

    final user = await _auth.signInWithEmailAndPassword(email: email, password: password);
    await user.sendEmailVerification();
    

相关问题