"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: "Gebe eine gültige E-Mail-Adresse ein" }) .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, { message: "Gib einen gültigen Vornamen ein", }) .max(30, { message: "Gib einen gültigen Vornamen ein", }) .refine((val) => val.length === 0 || /^[A-ZÄÖÜ]/.test(val), { message: "Der Vorname muss mit einem Großbuchstaben beginnen", }), lastname: z .string() .min(2, { message: "Gib einen gültigen Nachnamen ein", }) .max(30, { message: "Gib einen gültigen Nachnamen ein", }) .refine((val) => val.length === 0 || val.includes(" ") || /^[A-ZÄÖÜ]/.test(val), { message: "Der Nachname muss mit einem Großbuchstaben beginnen", }), password: z.string().min(12, { message: "Das Passwort muss mindestens 12 Zeichen lang sein", }), 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: "", }, }); return (
{ try { setIsLoading(true); const values = form.getValues(); const user = await register({ email: form.getValues("email").toLowerCase(), password: form.getValues("password"), firstname: form.getValues("firstname"), lastname: form.getValues("lastname"), }); if ("error" in user) { toast.error(user.error); return; } 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
Du warst bereits Nutzer der V1?
Du musst keinen neuen Account erstellen, sondern kannst dich mit deinen alten Zugangsdaten anmelden.

{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 : ""}

); };