带Firebase验证的FlutterGoRouter

p8h8hvxi  于 2023-02-16  发布在  Flutter
关注(0)|答案(1)|浏览(129)
    • bounty将在4天后过期**。回答此问题可获得+100声望奖励。Chris希望引起更多人关注此问题。

我正在使用go_router和firebase auth为我的web应用程序,但无法正确设置它。我尝试了以下操作:

class AuthService {
  static final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;

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

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

使用我的router

redirect: (context, 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;
  },

然而,这并不能正常工作,因为即使有用户登录,isLoggedIn也总是返回false。我搜索了这个主题,发现我可能将某种StreamNotifieronAuthStateChange一起使用,但我没有找到任何关于如何结合GoRouter实现正确的FirebaseAuthentication Flow的内容。
我该怎么做?
如果你需要更多信息就告诉我。

vxf3dgd4

vxf3dgd41#

你能做到的

class AuthService {
  static final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;

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

  static bool? _isLoggedIn = null;

  static bool isLoggedIn() {
    if(_isLoggedIn == null) {
       FirebaseAuth.instance
          .authStateChanges()
          .listen((User? user) {
             _isLoggedIn = user?.uid != null;
           });
       _isLoggedIn = _firebaseAuth.currentUser?.uid != null;
       return _isLoggedIn ?? false;
    }
    else {
       return _isLoggedIn ?? false;
    }
  ...

相关问题