Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🐛 [firebase_auth] FirebaseAuth.instance.currentUser initially null for the first few seconds initializing firebase on windows #12055

Open
Justus-M opened this issue Dec 19, 2023 · 28 comments · May be fixed by #12114
Assignees
Labels
platform: windows Issues / PRs which are specifically for Windows. plugin: auth type: bug Something isn't working

Comments

@Justus-M
Copy link

Justus-M commented Dec 19, 2023

Bug report

Describe the bug

FirebaseAuth.instance.currentUser is always null when initializing firebase on windows, even if the user is logged in. It then changes to a non-null value within a few seconds.

Steps to reproduce

Steps to reproduce the behavior:

  1. Login with FirebaseAuth on flutter windows
  2. restart app and print FirebaseAuth.instance.currentUser immediately after initializing firebase
  3. See that the value is null initially, and then changes after about 20 seconds

Expected behavior

I expect the logged in user object to be shown on initialization, otherwise I have to add a delay (not sure how long it needs to be) or I don't know whether to show the login page or not. On mac and web, currentUser is immediately loaded on initialization.

Flutter doctor

Run flutter doctor and paste the output below:

Click To Expand
PS C:\Users\justinmulli\blazesql_flutter> flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, 3.16.4, on Microsoft Windows [Version 10.0.17763.5122], locale en-US)
[√] Windows Version (Installed version of Windows is version 10 or higher)
[X] Android toolchain - develop for Android devices
    X Unable to locate Android SDK.
      Install Android Studio from: https://developer.android.com/studio/index.html
      On first launch it will assist you in installing the Android SDK components.
      (or visit https://flutter.dev/docs/get-started/install/windows#android-setup for detailed instructions).
      If the Android SDK has been installed to a custom location, please use
      `flutter config --android-sdk` to update to that location.

[√] Chrome - develop for the web
[√] Visual Studio - develop Windows apps (Visual Studio Community 2022 17.7.2)
[!] Android Studio (not installed)
[√] VS Code (version 1.85.1)
[√] Connected device (3 available)
[√] Network resources

! Doctor found issues in 2 categories.
PS C:\Users\justinmulli\blazesql_flutter>```


---

@Justus-M Justus-M added Needs Attention This issue needs maintainer attention. type: bug Something isn't working labels Dec 19, 2023
@Justus-M Justus-M changed the title 🐛 [firebase_auth] FirebaseAuth.instance.currentUser initially null after initializing firebase on windows, even for logged in users 🐛 [firebase_auth] FirebaseAuth.instance.currentUser initially null for the first few seconds initializing firebase on windows Dec 19, 2023
@danagbemava-nc danagbemava-nc added the triage Issue is currently being triaged. label Dec 19, 2023
@danagbemava-nc
Copy link

danagbemava-nc commented Dec 19, 2023

Hi @Justus-M, is this limited to only windows or do you experience it on other platforms as well?

Can you share the code sample you use as well?

@danagbemava-nc danagbemava-nc added blocked: customer-response Waiting for customer response, e.g. more information was requested. and removed Needs Attention This issue needs maintainer attention. labels Dec 19, 2023
@Justus-M
Copy link
Author

Justus-M commented Dec 23, 2023

I haven't had time to create a minimum reproducible example but I imagine you can just use the example app and print FirebaseAuth.instance.currentUser immediately after initializing firebase.

I have added a delay of a few seconds and then it is no longer null, so to be honest this is no longer a priority for me. I believe it's an issue with the library so I wanted to bring it to your attention since flutterfire is still in the early stages for windows and has various issues.

But the code is literally just

print(FirebaseAuth.instance.currentUser)

This prints null on windows after initializing firebase, even if the user was logged in before closing the app.

On mac, web, and mobile it does not return null

@google-oss-bot google-oss-bot added the Stale Issue with no recent activity label Jan 2, 2024
@google-oss-bot
Copy link

Hey @Justus-M. We need more information to resolve this issue but there hasn't been an update in 7 weekdays. I'm marking the issue as stale and if there are no new updates in the next 7 days I will close it automatically.

If you have more information that will help us get to the bottom of this, just add a comment!

@Justus-M
Copy link
Author

Justus-M commented Jan 2, 2024

I provided more information

@google-oss-bot google-oss-bot added Needs Attention This issue needs maintainer attention. and removed blocked: customer-response Waiting for customer response, e.g. more information was requested. Stale Issue with no recent activity labels Jan 2, 2024
@danagbemava-nc
Copy link

Sorry for the delay, it seems like the bot didn't remove the blocked label so I missed it in my notifications.

Reproducible using the plugin example app. I was already logged in, but the user came as null before the data was fully loaded.

cc @Lyokone

Launching lib\main.dart on Windows in debug mode...
CMake Deprecation Warning at C:/Users/Deana/Desktop/example/firebase_auth_example/build/windows/x64/extracted/firebase_cpp_sdk_windows/CMakeLists.txt:17 (cmake_minimum_required):
  Compatibility with CMake < 3.5 will be removed from a future version of
  CMake.

  Update the VERSION argument <min> value or use a ...<max> suffix to tell
  CMake that the project does not need compatibility with older versions.


√  Built build\windows\x64\runner\Debug\example.exe.
Connecting to VM Service at ws://127.0.0.1:50047/3U53madUGIc=/ws
flutter: user: null
flutter: user: null
[ERROR:flutter/shell/common/shell.cc(1015)] The 'firebase_auth_plugin/auth-state/[DEFAULT]' channel sent a message from native to Flutter on a non-platform thread. Platform channel messages must be sent on the platform thread. Failure to do so may result in data loss or crashes, and must be fixed in the plugin or application code creating that channel.
See https://docs.flutter.dev/platform-integration/platform-channels#channels-and-platform-threading for more information.
[ERROR:flutter/shell/common/shell.cc(1015)] The 'firebase_auth_plugin/id-token/[DEFAULT]' channel sent a message from native to Flutter on a non-platform thread. Platform channel messages must be sent on the platform thread. Failure to do so may result in data loss or crashes, and must be fixed in the plugin or application code creating that channel.
See https://docs.flutter.dev/platform-integration/platform-channels#channels-and-platform-threading for more information.
flutter: user: User(displayName: , email: [email protected], isEmailVerified: false, isAnonymous: false, metadata: UserMetadata(creationTime: null, lastSignInTime: null), phoneNumber: , photoURL: , providerData, [UserInfo(displayName: , email: [email protected], phoneNumber: , photoURL: , providerId: password, uid: [email protected])], refreshToken: null, tenantId: null, uid: AumEL2awh0NyOgfw1m7C8nGrsiK2)
[log] User(displayName: , email: [email protected], isEmailVerified: false, isAnonymous: false, metadata: UserMetadata(creationTime: null, lastSignInTime: null), phoneNumber: , photoURL: , providerData, [UserInfo(displayName: , email: [email protected], phoneNumber: , photoURL: , providerId: password, uid: [email protected])], refreshToken: null, tenantId: null, uid: AumEL2awh0NyOgfw1m7C8nGrsiK2)

@danagbemava-nc danagbemava-nc added plugin: auth platform: windows Issues / PRs which are specifically for Windows. and removed Needs Attention This issue needs maintainer attention. triage Issue is currently being triaged. labels Jan 2, 2024
@Lyokone Lyokone self-assigned this Jan 4, 2024
@Lyokone
Copy link
Contributor

Lyokone commented Jan 4, 2024

Thanks for the report, I'm looking into it

@richard457
Copy link

richard457 commented Jan 26, 2024

This happened on other platforms as well, tested on android

@Justus-M
Copy link
Author

@Lyokone Is it possible that this also has an impact on the authentication for Firestore requests shortly after creating a new account?

I have the following issue: after creating an account with createUserWithEmailAndPassword on windows, I try to add a document to Firestore but the Firestore security rules reject the operation. It seems that even though FirebaseAuth.instance.currentUser is not null, firestore security rules don't recognize the user as being authenticated (the security rules check that the user is authenticated, and that the users id matches the document ID).

When I restart the app after creating the user (or log in with an existing user in the first place), it works fine.

Unfortunately I haven't been able to create a minimum reproducible example (for some reason I can't reproduce it in the test app), so I figured I'd ask you since you worked on a potentially related issue.

@BirjuVachhani
Copy link

BirjuVachhani commented Apr 10, 2024

I am seeing this issue too on Windows. After I sign in/anonymous sign in, hot restarting the app returns currentUser as null. This also happens on subsequent app runs too.

In my case, it is always null, even after few seconds. I tried this:

 FirebaseAuth.instance.authStateChanges().listen((event) {
      print('Auth state changed: $event');
    });

and it only prints null and never prints again.

@Hmida71
Copy link

Hmida71 commented May 1, 2024

someone solved the problem ?

@Hmida71
Copy link

Hmida71 commented May 1, 2024

I am seeing this issue too on Windows. After I sign in/anonymous sign in, hot restarting the app returns currentUser as null. This also happens on subsequent app runs too.

In my case, it is always null, even after few seconds. I tried this:

 FirebaseAuth.instance.authStateChanges().listen((event) {
      print('Auth state changed: $event');
    });

and it only prints null and never prints again.

did you find solution ?

@BirjuVachhani
Copy link

I haven't. This makes our app useless on Windows! 🥲

@Hmida71
Copy link

Hmida71 commented May 2, 2024

I haven't. This makes our app useless on Windows! 🥲

u can make delay its work but still bad !

@BirjuVachhani
Copy link

I haven't. This makes our app useless on Windows! 🥲

u can make delay its work but still bad !

I can't. Its not that it is only null for the first few seconds...it stays null. So it always logs out users when reopened.

@Hmida71
Copy link

Hmida71 commented May 3, 2024

I haven't. This makes our app useless on Windows! 🥲

u can make delay its work but still bad !

I can't. Its not that it is only null for the first few seconds...it stays null. So it always logs out users when reopened.

try this : void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
FirebaseAuth.instance.authStateChanges().listen(
(event) {
if (event == null) {
isLogin = false;
} else {
isLogin = true;
}
},
);

await Future.delayed((const Duration(seconds: 2))).then((value) {
final user = FirebaseAuth.instance.currentUser;
if (user == null) {
isLogin = false;
} else {
isLogin = true;
}
});
print(isLogin);
runApp( .....

@remcova
Copy link

remcova commented Aug 6, 2024

Are there any updates on this? I'm experiencing this too.

@Justus-M
Copy link
Author

Justus-M commented Aug 6, 2024

No updates as far as I'm aware, except that I lost several customers because of it

@remcova
Copy link

remcova commented Aug 6, 2024

No updates as far as I'm aware, except that I lost several customers because of it

Yeah same here. I'm trying to find a solution at the moment. I'll post it here once I find it.

@remcova
Copy link

remcova commented Aug 8, 2024

@Justus-M do you use a YouTube scope by any chance for authentication?

@Justus-M
Copy link
Author

Justus-M commented Aug 8, 2024 via email

@remcova
Copy link

remcova commented Aug 8, 2024

Okay. I think I found a solution. It's the way you handle authentication. My current implementation that works now, looks like this:
await FirebaseAuth.instance.signInWithCredential(credential).whenComplete(() async { final user = FirebaseAuth.instance.currentUser; // do something with user });

Before I did it like this:
FirebaseAuth.instance.signInWithCredential(credential); FirebaseAuth.instance.authStateChanges().listen((User? user) async { // do something with the user object }

I hope this solves the issue for you too!

No, I had users encountering this issue with a normal email and password login

On Thu 8. Aug 2024 at 16:43, Remco van Akker @.> wrote: @Justus-M https://github.com/Justus-M do you use a YouTube scope by any chance for authentication? — Reply to this email directly, view it on GitHub <#12055 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AI2UQLB5IIHR5BTRT5Q45LTZQN72LAVCNFSM6AAAAABA22MTZWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDENZWGAYDONZSGI . You are receiving this because you were mentioned.Message ID: @.>

@Justus-M
Copy link
Author

Justus-M commented Aug 8, 2024 via email

@BirjuVachhani
Copy link

BirjuVachhani commented Aug 10, 2024

This issue makes Firebase useless because Windows app is un-usable. Can someone please look into this? @Lyokone

@venky9885
Copy link

having same issue

@remcova
Copy link

remcova commented Aug 13, 2024

How do you handle the authentication then? I'm saying that I'm not experiencing this issue anymore.

I was never adding a listener in the first place, your issue probably wasn’t network related like everyone else in this thread from the sounds of it On Thu 8. Aug 2024 at 18:03, Remco van Akker @.> wrote:

Okay. I think I found a solution. It's the way you handle authentication. My current implementation that works now, looks like this: await FirebaseAuth.instance.signInWithCredential(credential).whenComplete(() async { final user = FirebaseAuth.instance.currentUser; // do something with user }); Before I did it like this: FirebaseAuth.instance.signInWithCredential(credential); FirebaseAuth.instance.authStateChanges().listen((User? user) async { // do something with the user object } I hope this solves the issue for you too! No, I had users encountering this issue with a normal email and password login … <#m_5950327318018341650_> On Thu 8. Aug 2024 at 16:43, Remco van Akker @.
> wrote: @Justus-M https://github.com/Justus-M https://github.com/Justus-M https://github.com/Justus-M do you use a YouTube scope by any chance for authentication? — Reply to this email directly, view it on GitHub <#12055 (comment) <#12055 (comment)>>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AI2UQLB5IIHR5BTRT5Q45LTZQN72LAVCNFSM6AAAAABA22MTZWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDENZWGAYDONZSGI https://github.com/notifications/unsubscribe-auth/AI2UQLB5IIHR5BTRT5Q45LTZQN72LAVCNFSM6AAAAABA22MTZWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDENZWGAYDONZSGI . You are receiving this because you were mentioned.Message ID: @.
> — Reply to this email directly, view it on GitHub <#12055 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AI2UQLHZJZ7XYWGRBS7YWWLZQOJF7AVCNFSM6AAAAABA22MTZWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDENZWGE3TOOJXHE . You are receiving this because you were mentioned.Message ID: @.
**>

@ronpetit
Copy link

I'm having this error too, seems related to the channel error as it looks relevant to the auth-state

[ERROR:flutter/shell/common/shell.cc(1015)] The 'firebase_auth_plugin/auth-state/[DEFAULT]' channel sent a message from native to Flutter on a non-platform thread. Platform channel messages must be sent on the platform thread. Failure to do so may result in data loss or crashes, and must be fixed in the plugin or application code creating that channel.
See https://docs.flutter.dev/platform-integration/platform-channels#channels-and-platform-threading for more information.

flutter 3.24.3
firebase_core 3.4.1
firebase_auth 5.2.1

@colonal
Copy link

colonal commented Dec 7, 2024

I faced a similar issue where FirebaseAuth.instance.currentUser initially returned null for the first few seconds during Firebase initialization. Here's what I did to effectively handle this problem:

Solution

I utilized the FirebaseAuth.instance.authStateChanges() stream to listen for authentication state changes and created a FirebaseAuthService class to manage this behavior.

FirebaseAuthService Class

class FirebaseAuthService{
    static bool isLoggedIn = false;
    
    static void authStateChanges() {
        FirebaseAuth.instance.authStateChanges().listen((event) {
          if (event != null) {
            isLoggedIn = true;
          } else {
            isLoggedIn = false;
          }
        });
    }
}

Main File

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );
  FirebaseAuthService.authStateChanges();
  runApp(const FruitHub());
}

Example: Checking Login Status in the Splash Screen

From any file, you can check if the user is logged in. For example, in the splash screen:

var isLoggedIn = FirebaseAuthService.isLoggedIn;
if (isLoggedIn) {
  Navigator.pushReplacementNamed(context, MainView.routeName);
} else {
  Navigator.pushReplacementNamed(context, SignInView.routeName);
}

This approach ensures that your app correctly detects the user's authentication state as soon as it's available and navigates appropriately.

I hope this helps!

@BirjuVachhani
Copy link

@Lyokone Any updates on this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
platform: windows Issues / PRs which are specifically for Windows. plugin: auth type: bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.