일모도원(日暮途遠) 개발자
[Firebase] 앱 설치시 이미 로그인이 되어 있는 버그 본문
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);
}
}