diff --git a/docs/content/2.composables/1.useDirectusAuth.md b/docs/content/2.composables/1.useDirectusAuth.md index 2f7067ce..5027f4eb 100644 --- a/docs/content/2.composables/1.useDirectusAuth.md +++ b/docs/content/2.composables/1.useDirectusAuth.md @@ -41,7 +41,7 @@ const onSubmit = async () => { ### `createUser` -Create a new Directus user, can also be used as `register()`. **Email and password are required**, partial user object is given. +Create a new Directus user. **Email and password are required**, partial user object is given. May requires the module's option [`token`](/getting-started/options#token) to be set if you need to create a user sign in form for example. @@ -62,6 +62,52 @@ const onSubmit = async () => { ``` +### `register` + +Register a new Directus user using the built-in `register` endpoint. **Email and password are required**, partial user object is given. + +It requires the [`registration feature`](https://docs.directus.io/reference/authentication.html#register) to be enabled in the Directus backend. + +- **Arguments:** + - data: [`DirectusRegisterCredentials`](https://github.com/Intevel/nuxt-directus/blob/main/src/runtime/types/index.d.ts#L129) +- **Returns:** [`Promise`](https://docs.directus.io/reference/system/users/#the-user-object) + +```vue + +``` + +### `verifyEmail` + +If enabled in the Directus backend, registering a user sends a verification email with a link to allow the user to finish their registration. **Token is required**, user id is returned. + +It requires the [`registration feature`](https://docs.directus.io/reference/authentication.html#verify-a-registration) to be enabled in the Directus backend. + +- **Arguments:** + - data: [`DirectusEmailVerification`](https://github.com/Intevel/nuxt-directus/blob/main/src/runtime/types/index.d.ts#L137) +- **Returns:** [`Promise`](https://docs.directus.io/reference/system/users/#the-user-object) + +```vue + +``` + ### `requestPasswordReset` Password Request is submitted with email of the user to the given directus server. diff --git a/src/runtime/composables/useDirectusAuth.ts b/src/runtime/composables/useDirectusAuth.ts index 8de0b119..4ed5f069 100644 --- a/src/runtime/composables/useDirectusAuth.ts +++ b/src/runtime/composables/useDirectusAuth.ts @@ -9,6 +9,8 @@ import type { DirectusPasswordForgotCredentials, DirectusPasswordResetCredentials, DirectusRegisterCredentials, + DirectusEmailVerification, + DirectusUserCreation, DirectusUser } from '../types' import { useDirectus } from './useDirectus' @@ -74,7 +76,7 @@ export const useDirectusAuth = () => { ): Promise => { removeTokens() - const response = await $fetch<{data: DirectusAuthResponse}>('/auth/login', { + const response = await $fetch<{ data: DirectusAuthResponse }>('/auth/login', { baseURL: baseUrl, body: data, method: 'POST' @@ -108,7 +110,7 @@ export const useDirectusAuth = () => { } const createUser = async ( - data: DirectusRegisterCredentials, + data: DirectusUserCreation, useStaticToken?: boolean ): Promise => { return await directus('/users', { @@ -117,12 +119,22 @@ export const useDirectusAuth = () => { }, useStaticToken) } - // Alias for createUser const register = async ( data: DirectusRegisterCredentials - // eslint-disable-next-line require-await ): Promise => { - return createUser(data) + return await directus('/users/register', { + method: 'POST', + body: data + }) + } + + const verifyEmail = async ( + data: DirectusEmailVerification + ): Promise => { + return await directus('/users/register/verify-email', { + method: 'POST', + body: data + }) } const inviteUser = async ( @@ -184,6 +196,7 @@ export const useDirectusAuth = () => { logout, createUser, register, + verifyEmail, inviteUser, acceptInvite, loginWithProvider, diff --git a/src/runtime/types/index.d.ts b/src/runtime/types/index.d.ts index 4ec5046c..cbb43c35 100644 --- a/src/runtime/types/index.d.ts +++ b/src/runtime/types/index.d.ts @@ -121,9 +121,21 @@ export interface DirectusThumbnailOptions { key?: string; } +export interface DirectusUserCreation { + email: string; + password: string; +} + export interface DirectusRegisterCredentials { + first_name?: string | null; + last_name?: string | null; email: string; password: string; + verification_url?: string | null; +} + +export interface DirectusEmailVerification { + token: string; } export type DirectusFile = { @@ -149,13 +161,13 @@ export type DirectusFile = { uploaded_on: string; width?: number | null; [key: string]: any; -} | null; +} | null export type DirectusFolders = { id: string; name: string; parent?: string | DirectusFolders | null; -}; +} export interface DirectusFileRequest { id?: string; @@ -228,24 +240,24 @@ export interface DirectusRevision { export interface DirectusItemMetadata { total_count?: number; filter_count?: number; -}; +} export interface DirectusItems { data: NonNullable; meta?: DirectusItemMetadata; -}; +} export interface DirectusItem { data: NonNullable; -}; +} export interface DirectusInviteCreation { email: string; role: string; invite_url?: string -}; +} export interface DirectusAcceptInvite { token: string; password: string -}; +}