일모도원(日暮途遠) 개발자

[Firebase] 앱 설치시 이미 로그인이 되어 있는 버그 본문

Firebase

[Firebase] 앱 설치시 이미 로그인이 되어 있는 버그

달님개발자 2023. 12. 2. 13:07

Flutter로 개발중 안드로이드는 괜찬은데 아이폰에서만 앱을 삭제하고 재 설치해도 Firebase 유저가 로그인 되어 있는 버그가 발생했다.

검색해보니 이런경우가 좀 있는거 같다. 어떤 사람은 안드로이드에서도 같은 현상이 발생했다.

https://github.com/DeveloperAcademy-POSTECH/MacC-Team-HappyAnding/issues/365

https://github.com/invertase/react-native-firebase/issues/694

 

앱을 새로 설치했는데도 아래에서 userSnapshot.data에 기존에 로그인 했던 유저가 들어있다. 

  @override
  Widget build(BuildContext context) {
    return Drawer(
      child: FutureBuilder<firebaseAuthPrefix.User?>(
        future: firebaseAuthPrefix.FirebaseAuth.instance.authStateChanges().first,
        builder: (context, userSnapshot) {
          if (userSnapshot.connectionState == ConnectionState.waiting) {
            return Container();
          }

          final User? currentUser = userSnapshot.data;

 

 

 

결론은 앱을 처음 실행하면 그냥 로그아웃 한번 하는거다. 

class MySharedPreferences {
  static const keyFirstLaunch = "keyFirstLaunch";
  static Future<void> setFirstLaunch(bool value) async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    await prefs.setBool(keyFirstLaunch, value);
  }

  static Future<bool> getFirstLaunch() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    return prefs.getBool(keyFirstLaunch) ?? true;
  }
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  void initState() {
    super.initState();
    checkFirstLaunch();
  }

  Future<void> checkFirstLaunch() async {
    bool firstLaunch = await MySharedPreferences.getFirstLaunch();

    if (firstLaunch) {
      fbAuthService.logOut();
      fbAuthService.resetFcmTokenInFirebaseAfterLogout();
      MySharedPreferences.setFirstLaunch(false);
    }
  }