Flutter firebase вошедший в систему пользователь возвращает NULL currentUser после входа в систему
При аутентификации в firebase с использованием API signInWithEmailAndPassword () я не могу получить действительного «текущего» пользователя.
- Я вхожу в приложение под именем пользователя и паролем
auth.signInWithEmailAndPassword()
Как только я вошел в систему, пользователь попадает на главную страницу
Я пытаюсь получить UID пользователя, но действительный пользователь не вернулся. Вызов происходит в асинхронной функции как таковой:
currentUser = await auth.currentUser();
currentUser имеет значение null.
Есть идеи, что могло быть причиной этого?
Ответы
Что, если вы перезагрузите возвращенный FirebaseUser? Это сработало для меня.
const User currentUser = await auth.currentUser;
if (currentUser != null) {
await currentUser.reload();
}
Явно упрощенный код. Примечание: auth.currentUser () теперь auth.currentUser.
Это может быть дубликат: Flutter Firebase Authentication currentUser () возвращает null .
В документации предлагается использовать наблюдателя состояния аутентификации для получения обратного вызова, когда пользователь вошел в систему и доступен объект User. Как показано в связанной документации:
FirebaseAuth.instance
.authStateChanges()
.listen((User user) {
if (user == null) {
print('User is currently signed out!');
} else {
print('User is signed in!');
}
});
Я настоятельно рекомендую не полагаться на это currentUser
, так как это можно проверить только в определенный момент времени. Наблюдатель гарантированно сообщит вам, когда пользовательский объект станет доступен для использования.
после получения пользователя просто перезагрузите его, как только он решит ваш код проблемы для справки: D
final FirebaseAuth _auth = FirebaseAuth.instance;
User currentuser;
bool isloggedin= false;
getUser() async{
User user = _auth.currentUser;
await user?.reload();
user = _auth.currentUser;
if(user !=null)
{
setState(() {
this.currentuser = user;
this.isloggedin=true;
});
}
}