FirebaseUI-Flutter icon indicating copy to clipboard operation
FirebaseUI-Flutter copied to clipboard

[firebase_ui_auth] Emit `SignedIn` event after `UserCreated`

Open Rexios80 opened this issue 1 year ago • 4 comments

Is there an existing issue for this?

  • [X] I have searched the existing issues and found no duplicates.

What plugin is this bug for?

Firebase UI Auth

What platform(s) does this bug affect?

No response

List of dependencies used.

Not relevant

Steps to reproduce

  • Register a new user
  • SignedIn event is not sent

Expected Behavior

SignedIn event is sent after UserCreated event

Actual Behavior

SignedIn event is not sent after UserCreated event

Additional Information

No response

Rexios80 avatar Aug 20 '24 00:08 Rexios80

Not exactly sure if we want this behavior or not, but if this is intended it needs better documentation

Rexios80 avatar Aug 20 '24 00:08 Rexios80

@Rexios80 - Please provide a code sample for me to drop in to example app so I know specifically what you're referring to. Thanks.

russellwheatley avatar Sep 04 '24 08:09 russellwheatley

@russellwheatley The example code in the readme has this issue: https://pub.dev/packages/firebase_ui_auth

Using that code, the app does not go to the signed in page after registering a new user because there is no handler for the UserCreated event

Rexios80 avatar Sep 04 '24 13:09 Rexios80

I'm running into this as well - my newState goes from SigningIn to UserCreated and then never throws the SignedIn status. I'm assuming I'm safe to stop at UserCreated but this tripped me up as well as the documentation that @Rexios80 posted is what I was following, waiting for the status to hit SignedIn.

AuthStateListener<OAuthController>(
                child: OAuthProviderButton(
                    provider: GoogleProvider(
                        clientId:
                            'OMITTED.apps.googleusercontent.com')),
                listener: (oldState, newState, ctrl) {
                  dPrint('Old state: $oldState, New state: $newState');
                  if (newState is SigningIn) {
                    dPrint('Signing in...');
                  } else if (newState is UserCreated) {
                    dPrint('User created...');
                  } else if (newState is SignedIn) {
                    dPrint('Signed in with Google');
                    if (context.mounted) {
                      dPrint('Navigating to finish profile page');
                      Navigator.pushReplacement(
                        context,
                        MaterialPageRoute(
                          builder: (context) => const OauthFinishProfilePage(),
                        ),
                      );
                    }
                  } else if (newState is AuthFailed) {
                    dPrint('Authentication failed: ${newState.exception}');
                  }
                  return null;
                },
              ),

Here's what this outputs when I login using Google:

flutter: Old state: Instance of 'Uninitialized', New state: Instance of 'SigningIn'
flutter: Signing in...
flutter: Old state: Instance of 'SigningIn', New state: Instance of 'UserCreated'
flutter: User created...

jsenitza avatar Sep 12 '24 16:09 jsenitza

@Rexios80 - this is intentional behaviour which you can find here: https://github.com/firebase/FirebaseUI-Flutter/blob/auth-353/packages/firebase_ui_auth/lib/src/auth_flow.dart#L149-L156

When user is signed-in, it is one or the other value depending on whether the user is new or not.

You're correct though, perhaps it could be better documented though. We happily accept PRs if you want to update the documentation:

https://github.com/firebase/FirebaseUI-Flutter/blob/main/docs/firebase-ui-auth/providers/email.md?plain=1#L103-L105 https://github.com/firebase/FirebaseUI-Flutter/blob/main/docs/firebase-ui-auth/providers/email-link.md?plain=1#L116 https://github.com/firebase/FirebaseUI-Flutter/blob/main/docs/firebase-ui-auth/providers/oauth.md?plain=1#L224 https://github.com/firebase/FirebaseUI-Flutter/blob/main/docs/firebase-ui-auth/providers/phone.md?plain=1#L130

russellwheatley avatar Oct 25 '24 15:10 russellwheatley