2

当我在应用程序中按下“注销”时,currentUser 变为 null 但并没有真正注销应用程序,我正在使用 ScopedModel,如果我 print(model.isLoggedIn()) 返回 true,则表示应用程序中存在某个用户,但用户为空。

当我按下 signOut 时,我在输出中收到一条消息:

D/FirebaseAuth( 5252): Notifying id token listeners about a sign-out event.
D/FirebaseAuth( 5252): Notifying auth state listeners about a sign-out event.
D/FirebaseAuth( 5252): Notifying id token listeners about a sign-out event.
D/FirebaseAuth( 5252): Notifying auth state listeners about a sign-out event.
I/flutter ( 5252): true ( print in model.isLoggedIn() )

遵循登出代码

  void signOut() async{
    print(isLoggedIn());
    await FirebaseAuth.instance.signOut();
    userData = Map();
    notifyListeners();
    print(isLoggedIn());
  }

  bool isLoggedIn(){ return FirebaseUser != null; }

这是关于 UserModel 的完整代码: https ://github.com/willsgobi/coleirapet/blob/master/lib/models/loginmodel.dart

4

1 回答 1

1

FirebaseUser变量是类的一个字段,您可以在用户登录时自行设置。例如,在您的 repo 中的代码中是这样的:

_auth.createUserWithEmailAndPassword(
    email: userData["email"],
    password: pass
).then((user) async {
      firebaseUser = user.user;

当用户退出时,您不会更新此firebaseUser字段,因此它仍指向前一个对象。您需要强制重新加载,如下所示:

await FirebaseAuth.instance.signOut();
firebaseUser = await await _auth.currentUser();
于 2019-12-03T21:08:27.667 回答