ReactHooks
useDeleteAccount
Permanently delete the signed-in account with password confirmation.
Overview
useDeleteAccount wraps auth.deleteAccount({ password }) (session cookie only; no app API key in the body).
Signature
export function useDeleteAccount()Parameters
This hook takes no parameters.
Returns
| Field | Type | Description |
|---|---|---|
deleteAccount | (password: string) => Promise<unknown> | Deletes the current user after password confirmation. |
data | unknown | Last successful response when present. |
error | string | null | Human-readable error when deletion fails. |
isError | boolean | Convenience flag from error. |
isLoading | boolean | True while the delete request runs. |
isSuccess | boolean | True after a successful delete. |
reset | () => void | Clears hook state. |
Example
"use client"
import { useDeleteAccount } from "@/components/simpleauth"
export function DangerZone() {
const { deleteAccount, isLoading, error } = useDeleteAccount()
return (
<button
type="button"
disabled={isLoading}
onClick={() => void deleteAccount("current-password")}
>
Delete my account
{error ? <span>{error}</span> : null}
</button>
)
}How it works
- Uses
useSimpleAuthClient()and mapsSimpleAuthErrorintoerror.
Shipped by
npx @simpleauthjs/react add delete-accountSource
components/simpleauth/hooks/use-delete-account.ts
"use client"
import { useState } from "react"
import { SimpleAuthError, type SuccessResponse } from "@simpleauthjs/core"
import { useSimpleAuthClient } from "../provider"
function getErrorMessage(error: unknown) {
if (error instanceof SimpleAuthError) {
return error.message
}
if (error instanceof Error) {
return error.message
}
return "Unable to delete account."
}
export function useDeleteAccount() {
const auth = useSimpleAuthClient()
const [isLoading, setIsLoading] = useState(false)
const [error, setError] = useState<string | null>(null)
const [data, setData] = useState<SuccessResponse | null>(null)
async function deleteAccount(password: string) {
setIsLoading(true)
setError(null)
try {
const response = await auth.deleteAccount({ password })
setData(response)
return response
} catch (requestError) {
setData(null)
setError(getErrorMessage(requestError))
throw requestError
} finally {
setIsLoading(false)
}
}
function reset() {
setData(null)
setError(null)
setIsLoading(false)
}
return {
deleteAccount,
data,
error,
isError: Boolean(error),
isLoading,
isSuccess: Boolean(data?.success),
reset,
}
}