Change Email
better-auth-ui/change-emailFreeComponent
A form component for changing the user's email address with verification.
Live preview
live · rendered by the registry
Rendered by better-auth-ui on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://better-auth-ui.com/r/change-email.jsonSource
1"use client"23import { getViewURL } from "@better-auth-ui/core"4import { useAuth, useChangeEmail, useSession } from "@better-auth-ui/react"5import { type SyntheticEvent, useState } from "react"6import { toast } from "sonner"78import { Button } from "@/components/ui/button"9import { Card, CardContent, CardFooter } from "@/components/ui/card"10import { Field, FieldError, FieldLabel } from "@/components/ui/field"11import { Input } from "@/components/ui/input"12import { Skeleton } from "@/components/ui/skeleton"13import { Spinner } from "@/components/ui/spinner"14import { cn } from "@/lib/utils"1516export type ChangeEmailProps = {17 className?: string18}1920/**21 * Render a card containing a form to view and update the authenticated user's email.22 *23 * Shows a loading skeleton until session data is available, displays the current24 * email as the form's default value, and sends a verification email to the25 * new address upon successful submission.26 *27 * @returns A JSX element rendering the change-email card and form28 */29export function ChangeEmail({ className }: ChangeEmailProps) {30 const { authClient, basePaths, baseURL, localization, viewPaths } = useAuth()31 const { data: session } = useSession(authClient)3233 const { mutate: changeEmail, isPending } = useChangeEmail(authClient, {34 onSuccess: () => toast.success(localization.settings.changeEmailSuccess)35 })3637 const [fieldErrors, setFieldErrors] = useState<{38 email?: string39 }>({})4041 function handleSubmit(e: SyntheticEvent<HTMLFormElement>) {42 e.preventDefault()4344 const formData = new FormData(e.currentTarget)45 changeEmail({46 newEmail: formData.get("email") as string,47 callbackURL: getViewURL(48 baseURL,49 basePaths.settings,50 viewPaths.settings.account51 )52 })53 }5455 return (56 <div>57 <h2 className="text-sm font-semibold mb-3">58 {localization.settings.changeEmail}59 </h2>6061 <form onSubmit={handleSubmit}>62 <Card className={cn(className)}>63 <CardContent className="flex flex-col gap-6">64 <Field data-invalid={!!fieldErrors.email}>65 <FieldLabel htmlFor="email">{localization.auth.email}</FieldLabel>6667 {session ? (68 <Input69 key={session?.user.email}70 id="email"71 name="email"72 type="email"73 autoComplete="email"74 defaultValue={session?.user.email}75// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from better-auth-ui
All 49 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Account Settingsaccount-settings | better-auth-ui | Components | Free | 2 deps | |
| Active Sessionsactive-sessions | better-auth-ui | Components | Free | 5 deps · 2 files | |
| Additional Fieldadditional-field | better-auth-ui | Components | Free | 5 deps | |
| Adminadmin | better-auth-ui | Components | Free | 4 deps · 3 files | |
| Anonymousanonymous | better-auth-ui | Components | Free | 4 deps · 3 files | |
| API Keyapi-key | better-auth-ui | Components | Free | 4 deps · 10 files | |
| Authauth | better-auth-ui | Components | Free | 2 deps | |
| Auth Providerauth-provider | better-auth-ui | Components | Free | 4 deps · 2 files |
