- Change existing data model guides and add new ones for DML - Change module's docs around service factory + remove guides that are now necessary - Hide/remove all mentions of module relationships, or label them as coming soon. - Change all data model creation snippets to use DML - use `property` instead of `field` when referring to a data model's properties. - Fix all snippets in commerce module guides to use new method suffix (no more main model methods) - Rework recipes, removing/hiding a lot of sections as a lot of recipes are incomplete with the current state of DML. ### Other changes - Highlight fixes in some guides - Remove feature flags guide - Fix code block styles when there are no line numbers. ### Upcoming changes in other PRs - Re-generate commerce module references (for the updates in the method names) - Ensure that the data model references are generated correctly for models using DML. - (probably at a very later point) revisit recipes
76 lines
1.7 KiB
Plaintext
76 lines
1.7 KiB
Plaintext
export const metadata = {
|
||
title: `User Creation Flows`,
|
||
}
|
||
|
||
# {metadata.title}
|
||
|
||
This document provides flows to create a user.
|
||
|
||
## Invite Users
|
||
|
||
Another possible flow to create a user is by sending them an invite. Then, once they accept it, you create a new user for them:
|
||
|
||
```ts
|
||
// create invite
|
||
const invite = await userModuleService.createInvites({
|
||
email: "user@example.com",
|
||
})
|
||
|
||
// later, accept invite and create user
|
||
const invite =
|
||
await userModuleService.validateInviteToken("secret123")
|
||
|
||
await userModuleService.updateInvites({
|
||
id: invite.id,
|
||
accepted: true,
|
||
})
|
||
|
||
const user = await userModuleService.createUsers({
|
||
email: invite.email,
|
||
})
|
||
```
|
||
|
||
### Invite Expiry
|
||
|
||
An invite has an expiry date. You can renew the expiry date and refresh the token using the `refreshInviteTokens` method:
|
||
|
||
```ts
|
||
await userModuleService.refreshInviteTokens(["invite_123"])
|
||
```
|
||
|
||
---
|
||
|
||
## Straightforward Creation
|
||
|
||
Finally, you can create a user using the [create method of the User Module’s main service](/references/user/create):
|
||
|
||
```ts
|
||
const user = await userModuleService.createUsers({
|
||
email: "user@example.com",
|
||
})
|
||
```
|
||
|
||
### With the Auth Module
|
||
|
||
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 `AuthIdentity` object, you can use it to create a user if it doesn’t exist:
|
||
|
||
```ts
|
||
const { success, authIdentity } =
|
||
await authModuleService.authenticate("emailpass", {
|
||
// ...
|
||
})
|
||
|
||
// assuming authIdentity is defined
|
||
const [, count] = await userModuleService.listAndCountUsers({
|
||
email: authIdentity.entity_id,
|
||
})
|
||
|
||
if (!count) {
|
||
const user = await userModuleService.createUsers({
|
||
email: authIdentity.entity_id,
|
||
})
|
||
}
|
||
```
|