Something went wrong. Try again.
An AI-powered SaaS development platform for building, customizing, and deploying modern applications directly from natural language at scal… zentro.arjunkrishna.dev
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
import { Context, Next } from "hono";import { clerkMiddleware, getAuth } from "@hono/clerk-auth";import { db, user, withDefaults } from "@repo/db";import { eq } from "drizzle-orm";
export const clerkAuthMiddleware = clerkMiddleware();
export async function authMiddleware(c: Context, next: Next) { try { const auth = getAuth(c); if (!auth || !auth.userId) { return c.json({ message: "Unauthorized" }, 401); }
const clerkUserId = auth.userId; const email = auth.sessionClaims?.email as string | undefined; if (!email) { return c.json({ message: "Email not found" }, 404); }
const existingUser = await db .select() .from(user) .where(eq(user.clerk_id, clerkUserId)) .limit(1);
let dbUserId: string;
if (existingUser.length > 0) { dbUserId = existingUser[0].id; } else { const [newUser] = await db .insert(user) .values(withDefaults({ email, clerk_id: clerkUserId })) .returning(); dbUserId = newUser.id; }
c.set("userId", dbUserId); c.set("clerkUserId", clerkUserId); c.set("user", { email, id: dbUserId });
await next(); } catch (error) { return c.json({ message: "Unauthorized", error: (error as Error).message }, 401); }}