@proofgeist/kit
Version:
Create web application with the ProofKit stack
46 lines (41 loc) • 1.22 kB
text/typescript
"use server";
import { actionClient } from "@/server/safe-action";
import { verifyEmailSchema } from "./schema";
import {
setPasswordResetSessionAsEmailVerified,
validatePasswordResetSessionRequest,
} from "@/server/auth/utils/password-reset";
import { setUserAsEmailVerifiedIfEmailMatches } from "@/server/auth/utils/user";
import { redirect } from "next/navigation";
export const verifyEmailAction = actionClient
.schema(verifyEmailSchema)
.action(async ({ parsedInput }) => {
const { session } = await validatePasswordResetSessionRequest();
if (session === null) {
return {
error: "Not authenticated",
};
}
if (Boolean(session.email_verified)) {
return {
error: "Forbidden",
};
}
const { code } = parsedInput;
if (code !== session.code) {
return {
error: "Incorrect code",
};
}
await setPasswordResetSessionAsEmailVerified(session.id);
const emailMatches = await setUserAsEmailVerifiedIfEmailMatches(
session.id_user,
session.email
);
if (!emailMatches) {
return {
error: "Please restart the process",
};
}
return redirect("/auth/reset-password");
});