繁体   English   中英

Flutter Web Firebase 授权用户刷新后注销

[英]Flutter Web Firebase Auth user is logged out after refresh

我有一个Flutter Web应用程序,用户通过Firebase登录。 问题是每次刷新页面时,用户都会注销。

类似于 iOS:用户在刷新后保持登录状态,但在完全关闭应用程序时正在注销。

我知道有这个问题说它应该用最新版本修复,但我已经在假定已修复的版本上:

firebase_core: ^1.20.0

firebase_auth:^3.6.0

cloud_firestore:^3.4.1

我正在使用go_router并在用户未登录时redirect用户:

final GoRouter router = GoRouter(
  key: Get.key,
  urlPathStrategy: UrlPathStrategy.path,
  redirect: (state) {
    final String destination = state.location;

    final bool isOnStartView = destination == '/start';
    final bool isOnEmailFlow = state.subloc.contains('/email');

    if (!isOnStartView && !isOnEmailFlow && !AuthService.isLoggedIn()) {
      return '/start';
    }

    return null;
  },
  ...

这是我的AuthService.isLoggedIn()

  static final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;

  static User? get currentUser => FirebaseAuth.instance.currentUser;

  static bool isLoggedIn() {
    return _firebaseAuth.currentUser != null;
  }

我在这里错过了什么? 它到处都说应该修复它,但它对我不起作用。如果您需要更多详细信息,请告诉我!

实现这一目标的一种方法是您必须进行检查并将该值存储为持久数据。

因此,您可以使用 Shared Preferences 并在用户第一次登录时将 shared preferences 的值更改为 true。

然后在登录页面的 initstate 中获取共享首选项的值并检查它是否为真。 如果 true 导航到主页,否则导航到登录页面。

注意:这种方法在 localhost 中可能不起作用,但我相信当您将它托管到 firebase 托管时这将起作用。

希望这会有所帮助。

这不是冗余吗? 为什么不直接返回 currentUser?

static bool isLoggedIn() {
return currentUser != null;
 }

对依赖项的更新:firebase_auth:^3.6.4 此错误现已在最新版本中得到解决。

使用 stream - FirebaseAuth.instance.authStateChanges()

FirebaseAuth.instance
  .authStateChanges()
  .listen((User? user) {
    if (user != null) {
      print(user.uid);
    }
  });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM