Creating User fails
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);
}
Pretty sure it worked before. Let me check
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?
Has anyone already used the
createUserfunction?I always get a
FirebaseAuthAdminExceptionwith the codeauth/internalerrorand the messageAn 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
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 🤷♂️
print the stacktrace and see where it leads to
@niklasbartsch Give us more than this. Like the mail or password, or a git repository to reproduce the issue.
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.
This too works fine for me. It'd help if you could create a git repository at this point.
Could you make an example without dart_frog? I don't use that package and am not familiar with it.
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
You shouldn't need any special backend for the example.
A simple main directly executing createUser should do.
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;
});
}
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.
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
@niklasbartsch just confirming you have email authentication enabled on your project?
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 just confirming you have email authentication enabled on your project?
Yes. 👍
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?
I only use Platform.environment for the server. I already use the firebase-tools on my local machine...
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
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
getUseron that newly created user
It sounds like this fails for you. So it'd be valuable to see how exactly you did this specifically
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?
Nope, no idea. I have yet to see a case where it doesn't work for me.
In the lack of a way to reproduce the issue, I'll have to close this.
If you have any means of reproducing this reliably, please share :)