"use client"; import { zodResolver } from "@hookform/resolvers/zod"; import { useForm } from "react-hook-form"; import { z } from "zod"; import { register } from "../action"; import { signIn } from "next-auth/react"; import Link from "next/link"; import { useState } from "react"; import { Button } from "../../../_components/ui/Button"; import { sendVerificationLink } from "(app)/admin/user/action"; import toast from "react-hot-toast"; export const Register = () => { const schema = z .object({ email: z .string() .email({ message: "Please enter a valid email" }) .refine( (value) => { // Regex to check for email aliases like + or % const emailAliasRegex = /[+%]/; return !emailAliasRegex.test(value); }, { message: "Email-Aliase (wie + oder %) sind nicht erlaubt", }, ), firstname: z.string().min(2).max(30), lastname: z.string().min(2).max(30), password: z.string().min(12), passwordConfirm: z.string(), }) .superRefine(({ password, passwordConfirm }, ctx) => { if (password !== passwordConfirm) { ctx.addIssue({ code: "custom", message: "Die Passwörter stimmen nicht überein", path: ["passwordConfirm"], }); } }); type IFormInput = z.infer; const [isLoading, setIsLoading] = useState(false); const form = useForm({ resolver: zodResolver(schema), defaultValues: { email: "", password: "", passwordConfirm: "", }, }); console.log("Register form", form.formState.errors); return (
{ try { setIsLoading(true); const values = form.getValues(); const user = await register({ email: form.getValues("email"), password: form.getValues("password"), firstname: form.getValues("firstname"), lastname: form.getValues("lastname"), }); await sendVerificationLink(user.id); await signIn("credentials", { callbackUrl: "/", email: user.email, password: values.password, }); } catch (error) { toast.error( error instanceof Error ? error.message : "Es ist ein Fehler aufgetreten. Bitte versuche es später erneut.", ); } finally { setIsLoading(false); } })} >

Registrierung

Zurück zum{" "} Login

{typeof form.formState.errors.firstname?.message === "string" ? form.formState.errors.firstname.message : ""}

{typeof form.formState.errors.lastname?.message === "string" ? form.formState.errors.lastname.message : ""}

Account

{typeof form.formState.errors.email?.message === "string" ? form.formState.errors.email.message : ""}

{typeof form.formState.errors.password?.message === "string" ? form.formState.errors.password.message : ""}

{typeof form.formState.errors.passwordConfirm?.message === "string" ? form.formState.errors.passwordConfirm.message : ""}

); };