Appearance
useAuthApi Composable ​
File Information ​
- Path:
app/composables/api/useAuthApi.ts - Purpose: Authentication operations (login, logout, password reset, token login)
- Category: Authentication API Composable
Overview ​
The useAuthApi composable provides functionality for all authentication-related operations including login, logout, password reset, and token-based login.
Functions ​
login ​
Authenticates user with email and password.
Signature:
typescript
login(
email: string,
password: string,
workspaceUrlSlug?: string
): Promise<LoginResponse>Parameters:
email: string- User emailpassword: string- User passwordworkspaceUrlSlug?: string- Optional workspace URL slug
Returns:
Promise<LoginResponse>- Login response with user and token
API Endpoint: POST /login (skipAuth: true)
Usage:
typescript
const { login } = useAuthApi()
try {
const response = await login(email, password, workspaceSlug)
// response contains user data and access_token
// Store token via /api/auth/set-session
} catch (error) {
// Handle login error
}logout ​
Logs out user from backend.
Signature:
typescript
logout(token?: string | null): Promise<void>Parameters:
token?: string | null- Optional auth token
Returns:
Promise<void>- No return value
API Endpoint: POST /logout
Usage:
typescript
const { logout } = useAuthApi()
// Logout (token is optional)
await logout(token)
// Then clear session via /api/auth/clear-sessiongetUser ​
Fetches user data using token.
Signature:
typescript
getUser(token: string): Promise<User>Parameters:
token: string- Authentication token
Returns:
Promise<User>- User object
API Endpoint: GET /user (with Authorization header)
Usage:
typescript
const { getUser } = useAuthApi()
const user = await getUser(token)
// user contains full user dataloginWithToken ​
Logs in user with one-time token.
Signature:
typescript
loginWithToken(
oneTimeToken: string,
url?: string
): Promise<{ user: User, access_token: string }>Parameters:
oneTimeToken: string- One-time login tokenurl?: string- Optional brand URL
Returns:
Promise<{ user: User, access_token: string }>- User and access token
API Endpoint: POST /login-with-id (skipAuth: true)
Usage:
typescript
const { loginWithToken } = useAuthApi()
const { user, access_token } = await loginWithToken(token, brandUrl)
// Store token via /api/auth/set-sessionforgotPassword ​
Sends password reset email.
Signature:
typescript
forgotPassword(
email: string,
workspaceId: string
): Promise<void>Parameters:
email: string- User emailworkspaceId: string- Workspace ID/URL
Returns:
Promise<void>- No return value
API Endpoint: POST /forgot-password (skipAuth: true)
Usage:
typescript
const { forgotPassword } = useAuthApi()
await forgotPassword(email, workspaceId)
// Email sent to usergetResetPasswordDetails ​
Gets password reset details using token.
Signature:
typescript
getResetPasswordDetails(token: string): Promise<any>Parameters:
token: string- Reset password token
Returns:
Promise<any>- Reset password details
API Endpoint: POST /reset-password-details (skipAuth: true)
Usage:
typescript
const { getResetPasswordDetails } = useAuthApi()
const details = await getResetPasswordDetails(resetToken)
// Verify token is validresetPassword ​
Resets user password.
Signature:
typescript
resetPassword(
resetToken: string,
token: string,
password: string,
timezone: string
): Promise<any>Parameters:
resetToken: string- Reset password tokentoken: string- Additional tokenpassword: string- New passwordtimezone: string- User timezone
Returns:
Promise<any>- Response data
API Endpoint: POST /reset-password (skipAuth: true)
Usage:
typescript
const { resetPassword } = useAuthApi()
await resetPassword(resetToken, token, newPassword, timezone)
// Password reset successfulError Handling ​
All functions include error logging:
typescript
catch (error: any) {
console.error('[AuthAPI] {functionName} - Error:', error)
throw error
}Note: logout does not throw errors - it only logs them.
Type Definitions ​
typescript
import type { User, LoginResponse } from '~/types'Integration with API Client ​
The composable uses the global $api client:
typescript
const nuxtApp = useNuxtApp()
const $api = nuxtApp.$api
if (!$api || typeof $api !== 'function') {
throw new Error('[useAuthApi] $api is not available. Make sure api-client plugin is loaded.')
}Use Cases ​
Login Flow ​
typescript
const { login } = useAuthApi()
const handleLogin = async (email: string, password: string) => {
try {
const response = await login(email, password)
// Store token in HTTP-only cookie
await $api('/api/auth/set-session', {
method: 'POST',
body: {
token: response.access_token,
user: response.user
}
})
// Redirect to dashboard
await navigateTo('/dashboard')
} catch (error) {
// Show error message
snackbar.showError('Login failed')
}
}Logout Flow ​
typescript
const { logout } = useAuthApi()
const handleLogout = async () => {
try {
// Logout from backend
await logout(token)
} catch (error) {
// Log error but continue
} finally {
// Clear session cookies
await $api('/api/auth/clear-session', {
method: 'POST'
})
// Redirect to login
await navigateTo('/login')
}
}Password Reset Flow ​
typescript
const { forgotPassword, getResetPasswordDetails, resetPassword } = useAuthApi()
// Step 1: Request reset
await forgotPassword(email, workspaceId)
// Step 2: Verify token (when user clicks link)
const details = await getResetPasswordDetails(resetToken)
// Step 3: Reset password
await resetPassword(resetToken, token, newPassword, timezone)Related Documentation ​
- Authentication Feature - Authentication system
- Server API - Set Session - Store token
- Server API - Clear Session - Clear session