feat(auth) : add optional email verification and profile setup
CI / Verify (push) Failing after 57s
CI / Build immutable images and deploy (push) Skipped

This commit is contained in:
2026-10-08 18:46:04 +07:00 Unverified
parent 01f44688fb
commit da5de3fa8c
8 changed files with 111 additions and 16 deletions
+16 -3
View File
@@ -1,17 +1,30 @@
import { redirect } from "next/navigation";
import { eq } from "drizzle-orm";
import { getDb } from "@/db";
import { users } from "@/db/schema";
import { SiteHeader } from "@/components/public/site-header";
import { isAuthorizedAdmin } from "@/lib/auth/authorization";
import { getCustomerSession } from "@/lib/auth/server";
import { safeAuthReturnPath } from "@/lib/auth/return-path";
import { AccountForm } from "./account-form";
import { ProfileForm } from "./profile-form";
export async function AccountPage({ mode, next, verified, verificationError }: {
mode: "login" | "register"; next: unknown; verified?: boolean; verificationError?: boolean;
export async function AccountPage({ mode, next, verified, verificationError, setup = false }: {
mode: "login" | "register"; next: unknown; verified?: boolean; verificationError?: boolean; setup?: boolean;
}) {
const nextPath = safeAuthReturnPath(next);
const session = await getCustomerSession();
if (session) {
if (nextPath.startsWith("/admin") && !isAuthorizedAdmin(session.user)) redirect("/");
const returnPath = nextPath.startsWith("/admin") && !isAuthorizedAdmin(session.user) ? "/" : nextPath;
if (mode === "register" && setup) {
const [user] = await getDb().select({ name: users.name, email: users.email, image: users.image })
.from(users).where(eq(users.id, session.user.id)).limit(1);
if (!user) redirect("/auth/login");
return <div className="min-h-svh"><SiteHeader /><main className="grid min-h-[calc(100svh-4rem)] place-items-center p-4">
<div className="w-full max-w-sm"><ProfileForm {...user} nextPath={returnPath} setup /></div>
</main></div>;
}
if (returnPath !== nextPath) redirect(returnPath);
redirect(nextPath);
}
const siteKey = process.env.TURNSTILE_SITE_KEY ?? "";