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

时间:2018-05-20 20:24:55

标签: firebase dart firebase-authentication flutter

这是关于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()

3 个答案:

答案 0 :(得分:2)

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

这将有效:

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

当然,此代码已简化。我们不希望每次登录时都发送验证邮件。

答案 1 :(得分:1)

查看firebase_auth代码,我看到signInWithEmailAndPassword确实实例化并返回用户。这可能是您需要使用。{/ p>调用sendEmailVerification的用户

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

答案 2 :(得分:0)

如果重新加载返回的FirebaseUser怎么办?这对我有用。

const User currentUser = await auth.currentUser;
if (currentUser != null) {
  await currentUser.reload();
}

明显简化的代码。 注意:auth.currentUser()现在是auth.currentUser。