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

Creating User fails #12

Open
niklasbartsch opened this issue Nov 29, 2023 · 24 comments
Open

Creating User fails #12

niklasbartsch opened this issue Nov 29, 2023 · 24 comments
Labels
bug Something isn't working question Further information is requested

Comments

@niklasbartsch
Copy link

Has anyone already used the createUser function?

I always get a FirebaseAuthAdminException with the code auth/internalerror and the message An internal error has occurred.

final createRequest = CreateRequest(
      email: email,
      displayName: '$firstName $lastName',
      password: randomPassword,
    );

try {
      user = await auth.createUser(createRequest);
 } on FirebaseAuthAdminException catch (e) {
      print('');
      print('FirebaseAuthAdminException');
      print('code: ${e.code}');
      print('message: ${e.message}');
 } catch (e) {
      print('catched: $e);
 }
@rrousselGit rrousselGit added the bug Something isn't working label Nov 29, 2023
@rrousselGit
Copy link
Collaborator

Pretty sure it worked before. Let me check

@rrousselGit
Copy link
Collaborator

This works just fine for me. Do you maybe have a more specific example? Maybe it's a specific email/password combination that's the issue?

@rrousselGit rrousselGit added the question Further information is requested label Nov 30, 2023
@samtuga1
Copy link

Has anyone already used the createUser function?

I always get a FirebaseAuthAdminException with the code auth/internalerror and the message An internal error has occurred.

final createRequest = CreateRequest(
      email: email,
      displayName: '$firstName $lastName',
      password: randomPassword,
    );

try {
      user = await auth.createUser(createRequest);
 } on FirebaseAuthAdminException catch (e) {
      print('');
      print('FirebaseAuthAdminException');
      print('code: ${e.code}');
      print('message: ${e.message}');
 } catch (e) {
      print('catched: $e);
 }

This works fine for me tho, print the email/password combination and make sure it exists

@niklasbartsch
Copy link
Author

I have still the same issue. The email and password is correct.
I printed the error code and its AuthClientErrorCode.internalError
What am I missing?

Future<UserRecord> createUser(CreateRequest properties) async {
    return _authRequestHandler
        .createNewAccount(properties)
        // Return the corresponding user record.
        .then(getUser)
        .onError<FirebaseAuthAdminException>((error, _) {
      if (error.errorCode == AuthClientErrorCode.userNotFound) {
        // Something must have happened after creating the user and then retrieving it.
        throw FirebaseAuthAdminException(
          AuthClientErrorCode.internalError,
          'Unable to create the user record provided.',
        );
      }
      throw error;
    });
  }

It seems like the user is not created fast enough 🤷‍♂️

@samtuga1
Copy link

samtuga1 commented Dec 7, 2023

print the stacktrace and see where it leads to

@rrousselGit
Copy link
Collaborator

@niklasbartsch Give us more than this. Like the mail or password, or a git repository to reproduce the issue.

@niklasbartsch
Copy link
Author

niklasbartsch commented Dec 7, 2023

Maybe this smaler example helps:

import 'package:api/helpers/extensions.dart';
import 'package:dart_firebase_admin/auth.dart';
import 'package:dart_frog/dart_frog.dart';

Future<Response> onRequest(RequestContext context) async {
  final auth = context.firebaseAuth;

  try {
    await auth.createUser(
      CreateRequest(
        email: '[email protected]',
        password: 'Hello1234',
      ),
    );
  } catch (e) {
    print('create user failed: $e');
  }

  return Response(body: 'Welcome to Dart Frog!');
}

create user failed: FirebaseAuthAdminException: auth/internalerror: An internal error has occurred.

The function is failing, but the user gets created.

@rrousselGit
Copy link
Collaborator

This too works fine for me. It'd help if you could create a git repository at this point.

@niklasbartsch
Copy link
Author

I created this sample dart_frog server.

[PROJECT_ID] and [username] has to be set manually user_api

@rrousselGit
Copy link
Collaborator

Could you make an example without dart_frog? I don't use that package and am not familiar with it.

@samtuga1
Copy link

samtuga1 commented Dec 7, 2023

Could you make an example without dart_frog? I don't use that package and am not familiar with it.

@niklasbartsch Check out Pharaoh It is a backend framework that is highly inspired by ExpressJS. it is very easy to use when coming from Express. you can try building your example with it

@rrousselGit
Copy link
Collaborator

You shouldn't need any special backend for the example.

A simple main directly executing createUser should do.

@niklasbartsch
Copy link
Author

You can find my simplified code in the local_main.dart file.

The user gets created but the functions throws the same error.

As I mentioned it is looking too early for the not yet created user.

FirebaseAuthAdminException: auth/internalerror: An internal error has occurred.

Your code in the dart_firebase_admin package:

  /// Creates a new user.
  ///
  /// See https://firebase.google.com/docs/auth/admin/manage-users#create_a_user
  /// for code samples and detailed documentation.
  ///
  /// Returns A Future fulfilled with the user
  /// data corresponding to the newly created user.
  Future<UserRecord> createUser(CreateRequest properties) async {
    return _authRequestHandler
        .createNewAccount(properties)
        // Return the corresponding user record.
        .then(getUser)
        .onError<FirebaseAuthAdminException>((error, _) {
      if (error.errorCode == AuthClientErrorCode.userNotFound) {
        // Something must have happened after creating the user and then retrieving it.
        throw FirebaseAuthAdminException(
          AuthClientErrorCode.internalError,
          'Unable to create the user record provided.',
        );
      }
      throw error;
    });
  }

@rrousselGit
Copy link
Collaborator

As I mentioned it is looking too early for the not yet created user.

Where?
The getUser invocation is correct. That's exactly how the JS SDK does it too.

So far, there are no indications that your "internalError" is pointing to the "Unable to create the user record". You haven't shared the message nor the stacktrace after-all.

You can find my simplified code in the local_main.dart file.

I hate to say it, but your code works for me.

@niklasbartsch
Copy link
Author

That is not the answer I was hoping for 😅

dart local_main.dart
error Code: AuthClientErrorCode.userNotFound
Stacktrace: #0      main (file:///Users/niklasbartsch/dev/user_api/local_main.dart:52:37)
<asynchronous suspension>

FirebaseAuthAdminException: auth/internalerror: An internal error has occurred.

"error Code:" is from the onError Function

@Ehesp
Copy link
Member

Ehesp commented Dec 10, 2023

@niklasbartsch just confirming you have email authentication enabled on your project?

@niklasbartsch
Copy link
Author

Could you make an example without dart_frog? I don't use that package and am not familiar with it.

@niklasbartsch Check out Pharaoh It is a backend framework that is highly inspired by ExpressJS. it is very easy to use when coming from Express. you can try building your example with it

I'm currently too happy with dart_frog. I've been using it with Globe.dev since august and its working like a charm.

@niklasbartsch
Copy link
Author

@niklasbartsch just confirming you have email authentication enabled on your project?

Yes. 👍

@Ehesp
Copy link
Member

Ehesp commented Dec 10, 2023

Another quick check would be 'npm i firebase-tools', use the same service account and see if it works. If it does, then we suspect it's to do with how the request is authenticated?

@niklasbartsch
Copy link
Author

I only use Platform.environment for the server. I already use the firebase-tools on my local machine...

@niklasbartsch
Copy link
Author

I printed the user id from the createNewAccount function and its the same one that gets created.

I tried to get the user with the id in a separate function and that failed too.
I also tried other ids of users that I already use in the frontend, didn't work either.

FirebaseAuthAdminException: auth/usernotfound: There is no user record corresponding to the provided identifier.

There is only one created account that i can find with the getUserByEmail and the uid of this user is not the one that I can find in the console.

To validate that I am in the correct project I printed the firebaseAuth.app.projectId and its correct

@rrousselGit
Copy link
Collaborator

From your description, users are correctly created.
Sounds like what you're saying is that getUser does not work on your side.

Maybe try and make make new steps to reproduce the issue that do not rely on createNewAccount?

Such as maybe:

  • Manually create a new user in the Firebase console
  • call getUser on that newly created user

It sounds like this fails for you. So it'd be valuable to see how exactly you did this specifically

@niklasbartsch
Copy link
Author

I tried to create a user in the firebase console and through the app. I am not able to get both accounts with getUserByEmail or getUser. Also not after signing in with them.

Any ideas why I get a wrong uid from the one user I can fetch?

@rrousselGit
Copy link
Collaborator

Nope, no idea. I have yet to see a case where it doesn't work for me.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working question Further information is requested
Projects
None yet
Development

No branches or pull requests

4 participants