Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 47 additions & 1 deletion docs/content/2.composables/1.useDirectusAuth.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand All @@ -62,6 +62,52 @@ const onSubmit = async () => {
</script>
```

### `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<DirectusUser>`](https://docs.directus.io/reference/system/users/#the-user-object)

```vue
<script setup lang="ts">
const { register } = useDirectusAuth();
const router = useRouter();

const onSubmit = async () => {
try {
const newUser = await register({ email: "", password: "" });
} catch (e) {}
};
</script>
```

### `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<string>`](https://docs.directus.io/reference/system/users/#the-user-object)

```vue
<script setup lang="ts">
const { verifyEmail } = useDirectusAuth();
const router = useRouter();

const onSubmit = async () => {
try {
const userId = await verifyEmail({ token: "" });
} catch (e) {}
};
</script>
```

### `requestPasswordReset`

Password Request is submitted with email of the user to the given directus server.
Expand Down
23 changes: 18 additions & 5 deletions src/runtime/composables/useDirectusAuth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import type {
DirectusPasswordForgotCredentials,
DirectusPasswordResetCredentials,
DirectusRegisterCredentials,
DirectusEmailVerification,
DirectusUserCreation,
DirectusUser
} from '../types'
import { useDirectus } from './useDirectus'
Expand Down Expand Up @@ -74,7 +76,7 @@ export const useDirectusAuth = () => {
): Promise<DirectusAuthResponse> => {
removeTokens()

const response = await $fetch<{data: DirectusAuthResponse}>('/auth/login', {
const response = await $fetch<{ data: DirectusAuthResponse }>('/auth/login', {
baseURL: baseUrl,
body: data,
method: 'POST'
Expand Down Expand Up @@ -108,7 +110,7 @@ export const useDirectusAuth = () => {
}

const createUser = async (
data: DirectusRegisterCredentials,
data: DirectusUserCreation,
useStaticToken?: boolean
): Promise<DirectusUser> => {
return await directus('/users', {
Expand All @@ -117,12 +119,22 @@ export const useDirectusAuth = () => {
}, useStaticToken)
}

// Alias for createUser
const register = async (
data: DirectusRegisterCredentials
// eslint-disable-next-line require-await
): Promise<DirectusUser> => {
return createUser(data)
return await directus('/users/register', {
method: 'POST',
body: data
})
}

const verifyEmail = async (
data: DirectusEmailVerification
): Promise<string> => {
return await directus('/users/register/verify-email', {
method: 'POST',
body: data
})
}

const inviteUser = async (
Expand Down Expand Up @@ -184,6 +196,7 @@ export const useDirectusAuth = () => {
logout,
createUser,
register,
verifyEmail,
inviteUser,
acceptInvite,
loginWithProvider,
Expand Down
26 changes: 19 additions & 7 deletions src/runtime/types/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 = {
Expand All @@ -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;
Expand Down Expand Up @@ -228,24 +240,24 @@ export interface DirectusRevision {
export interface DirectusItemMetadata {
total_count?: number;
filter_count?: number;
};
}

export interface DirectusItems<T> {
data: NonNullable<T[]>;
meta?: DirectusItemMetadata;
};
}

export interface DirectusItem<T> {
data: NonNullable<T>;
};
}

export interface DirectusInviteCreation {
email: string;
role: string;
invite_url?: string
};
}

export interface DirectusAcceptInvite {
token: string;
password: string
};
}