UNPKG

@proofkit/cli

Version:

Create web application with the ProofKit stack

50 lines (43 loc) 1.63 kB
"use server"; import { actionClient } from "@/server/safe-action"; import { signupSchema } from "./schema"; import { checkEmailAvailability, createUser } from "@/server/auth/utils/user"; import { verifyPasswordStrength } from "@/server/auth/utils/password"; import { createSession, setSessionTokenCookie, } from "@/server/auth/utils/session"; import { generateSessionToken } from "@/server/auth/utils/session"; import { redirect } from "next/navigation"; import { createEmailVerificationRequest, sendVerificationEmail, setEmailVerificationRequestCookie, } from "@/server/auth/utils/email-verification"; export const signupAction = actionClient .schema(signupSchema) .action(async ({ parsedInput }) => { const { email, password } = parsedInput; const emailAvailable = await checkEmailAvailability(email); if (!emailAvailable) { return { error: "Email already in use" }; } const passwordStrong = await verifyPasswordStrength(password); if (!passwordStrong) { return { error: "Password is too weak" }; } const user = await createUser(email, password); const emailVerificationRequest = await createEmailVerificationRequest( user.id, user.email ); await sendVerificationEmail( emailVerificationRequest.email, emailVerificationRequest.code ); await setEmailVerificationRequestCookie(emailVerificationRequest); const sessionToken = generateSessionToken(); const session = await createSession(sessionToken, user.id); setSessionTokenCookie(sessionToken, session.expiresAt); return redirect("/auth/verify-email"); });