Flutter firebase zalogowany użytkownik zwraca wartość currentUser o wartości NULL po zalogowaniu
Podczas uwierzytelniania w Firebase przy użyciu funkcji API signInWithEmailAndPassword () nie mogę uzyskać prawidłowego „bieżącego” użytkownika.
- Loguję się do aplikacji za pomocą nazwy użytkownika i hasła
auth.signInWithEmailAndPassword()
Po zalogowaniu się użytkownik zostaje przeniesiony na stronę główną
Próbuję uzyskać identyfikator UID użytkownika, ale nie zwrócono prawidłowego użytkownika. Wywołanie odbywa się w funkcji asynchronicznej jako takiej:
currentUser = await auth.currentUser();
currentUser ma wartość null.
Jakieś pomysły, co może być tego przyczyną?
Odpowiedzi
Co się stanie, jeśli ponownie załadujesz zwrócony FirebaseUser? To zadziałało dla mnie.
const User currentUser = await auth.currentUser;
if (currentUser != null) {
await currentUser.reload();
}
Wyraźnie uproszczony kod. Uwaga: auth.currentUser () to teraz auth.currentUser.
To może być duplikat: Flutter Firebase Authentication currentUser () zwraca null .
Dokumentacja sugeruje użycie obserwatora stanu uwierzytelniania w celu uzyskania wywołania zwrotnego, gdy użytkownik jest zalogowany, a obiekt użytkownika jest dostępny. Jak pokazano w tej połączonej dokumentacji:
FirebaseAuth.instance
.authStateChanges()
.listen((User user) {
if (user == null) {
print('User is currently signed out!');
} else {
print('User is signed in!');
}
});
Sugeruję nie powołując się na currentUser
, jak to można sprawdzić tylko na chwilę w czasie. Obserwator na pewno poinformuje Cię, kiedy obiekt użytkownika będzie dostępny do użycia.
po uzyskaniu użytkownika po prostu załaduj go ponownie, gdy rozwiąże to kod problemu w celach informacyjnych: 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;
});
}
}