Skip to main content
Skip to main content

User Creation with Auth Module

In this document, you’ll learn about the user-creation flow and how to use it with the User Module.

Auth User Creation in Authentication Flow

In the Auth Provider documentation, you learned about the authentication flows supported by the Auth Module. These flows are used when an AuthUser is already available for the specified authentication data, such as email/password credentials.

However, the emailpass and google providers support creating an AuthUser if none exists. If an email is provided that doesn’t have an AuthUser associated with it (checked via its entity_id attribute) for the specified provider (checked via its provider attribute), a new AuthUser is created for that email and provider.

Diagram showcasing the AuthUser creation part of the authentication flow

So, by default, your authentication flow supports both sign-in and sign-up flows.

Tip

This step actually occurs at different points of the authentication flow for each of the providers. For the emailpass provider, it occurs before checking that the password is correct. For the google provider, you must go through the full authentication flow to retrieve the user details, such as email, from Google.


Creating a User in the User Module

The User Module provides user and invite management functionalities. However, it doesn’t provide authentication functionalities or store any related data.

By combining the User and Auth Modules, you can use the Auth Module for authenticating users, and the User Module to manage those users.

So, when a user is authenticated, and you receive the AuthUser object, you can use it to create a user if it doesn’t exist:

const { success, authUser } =
await authModuleService.authenticate("emailpass", {
// ...
})

// assuming authUser is defined
const [, count] = await userModuleService.listAndCount({
email: authUser.entity_id,
})

if (!count) {
const user = await userModuleService.create({
email: authUser.entity_id,
})
}
Was this section helpful?