Проверка подлинности Flutter Firebase currentUser () возвращает значение null

Речь идет о плагине Flutter Firebase Authentication.
Я пытаюсь отправить письмо с подтверждением после создания нового пользователя, но sendEmailVerification () внутренне использует currentUser (). Мне это кажется ошибкой, но на всякий случай я отправляю вопрос в 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()
Интеграция Angular - Firebase Analytics
Интеграция Angular - Firebase Analytics
Узнайте, как настроить Firebase Analytics и отслеживать поведение пользователей в вашем приложении Angular.
3
0
3 073
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Глядя на код firebase_auth, я вижу, что signInWithEmailAndPassword действительно создает и возвращает пользователя. Вероятно, это тот пользователь, с которым вам нужно вызвать в sendEmailVerification.

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

Это именно то, что я написал в своем вопросе. Он действительно возвращает FirebaseUser, но как только вы вызываете для него sendEmailVerification (), вызов завершается ошибкой.

Boris R. 21.05.2018 02:12

Это действительно выглядит странно. Заглянув в плагин java, он вызывает firebaseAuth.signInWithEmailAndPassword, что означает, что должен быть установлен currentUser, если только не возникла проблема с входом в систему. Вы уверены, что пользователь существует и адрес электронной почты / пароль верны?

Edman 21.05.2018 02:31

Если у вас есть существующий пользователь в Firebase, и после вызова _auth.signInWithEmailAndPassword с правильными учетными данными _auth.currentUser возвращает null, это ошибка.

Edman 21.05.2018 02:39

Да, у меня нет проблем с аутентификацией с помощью signInWithEmailAndPassword и возвращением FirebaseUser. Я думаю, что это ошибка.

Boris R. 21.05.2018 02:52
Ответ принят как подходящий

Вот что я обнаружил, и я не уверен, что это все еще ошибка или нет, но есть способ заставить ее работать. FirebaseUser, возвращаемый signInWithEmailAndPassword, на самом деле не аутентифицирован. Только пользователь, возвращенный потоком onAuthStateChanged, имеет значение. Итак, если вы вызываете user.sendEmailVerification () из контекста onAuthStateChanged, тогда все в порядке.

Это будет работать:

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

Конечно, этот код упрощен. Мы не хотим отправлять подтверждающее электронное письмо при каждой попытке входа в систему.

Что, если вы перезагрузите возвращенный FirebaseUser? Это сработало для меня.

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

Ясно упрощенный код. Примечание: auth.currentUser () теперь auth.currentUser.

Другие вопросы по теме