gpt4 book ai didi

Firebase.instance.signOut() 未将 currentUser() 设置为 null

转载 作者:行者123 更新时间:2023-12-04 11:45:33 25 4
gpt4 key购买 nike

为什么我的 signOut() 方法没有将 currentUser() 设置为 null?

当我单击主页上的注销时,它会检查 isAuthenticated() 方法,该方法返回用户而不是 null。另外,看看我在 logout() 方法中包含的两个注释。
谢谢你!!

这是我的代码 -

class Auth with ChangeNotifier {
final FirebaseAuth _auth = FirebaseAuth.instance;
final GoogleSignIn _googleSignIn = GoogleSignIn();

bool isAuthenticated() {
print('$currentUser inside the isAuthenticated');
if (currentUser == null) {
print('false');
return false;
}
print('true');
return true;
}

Future<FirebaseUser> get currentUser async {
return await _auth.currentUser();
}


Future<FirebaseUser> signInWithEmail(String email, String password) async {
try {
final response = await _auth.signInWithEmailAndPassword(
email: email,
password: password,
);
print(response);

if (response == null) {
print('response is null');
} else {
notifyListeners();
return response.user;
}
} catch (error) {
print('some error');
throw error;
}
}

Future<FirebaseUser> signInWithGoogle() async {
try {
final GoogleSignInAccount _userDetails = await _googleSignIn.signIn();
if (_userDetails == null) {
print('No user found');
} else {
final GoogleSignInAuthentication googleAuth =
await _userDetails.authentication;

final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);

final FirebaseUser user =
(await _auth.signInWithCredential(credential)).user;

return user;
}
notifyListeners();
print('google sign in ran successfully');
} catch (error) {
throw error;
}
}

Future<FirebaseUser> logout() async {
try {
print('logout ran');
print(currentUser); //THIS RETURNS AN INSTANCE OF USER
_auth.signOut().then( (response) {
print('signout successful');
});

await _googleSignIn.signOut();
print(currentUser); //THIS *ALSO* RETURNS AN INSTANCE OF USER
notifyListeners();
return currentUser;
} catch (error) {
print('an error');
}
}
}

我知道会有一个我无法捕捉到的愚蠢错误,但现在很累!!我已经尝试了可以​​在 stackoverflow 上找到的其他方法

最佳答案

当您尝试获取当前用户时,可能 future 还没有完成,您是否尝试过等待而不是在注销时?

Future<FirebaseUser> logout() async {
try {
print('logout ran');
print(currentUser); //THIS RETURNS AN INSTANCE OF USER
await _auth.signOut();

await _googleSignIn.signOut();
//The problem is with this, you need to await this
//print(currentUser); //THIS *ALSO* RETURNS AN INSTANCE OF USER
var user = await currentUser;
print(user); //prints null
notifyListeners();
return currentUser;
} catch (error) {
print('an error');
}
}

关于Firebase.instance.signOut() 未将 currentUser() 设置为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59783409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com