fitaiProto/apps/admin/src/lib/auth-helper.ts
2026-03-10 04:14:03 +01:00

51 lines
1.3 KiB
TypeScript

import { auth, currentUser } from "@clerk/nextjs/server";
import { NextRequest } from "next/server";
import log from "./logger";
/**
* Get authenticated user ID from request
* Handles both session-based auth (web) and Bearer token auth (mobile)
*
* For mobile apps using Clerk Expo, tokens should be passed as:
* Authorization: Bearer <token>
*/
export async function getAuthUserId(req: NextRequest): Promise<string | null> {
try {
// Clerk's auth() should handle both cookies and Bearer tokens automatically
// when the request is properly formatted
const { userId } = await auth();
if (userId) {
log.debug("Authenticated user", { userId });
return userId;
}
log.debug("No authentication found");
// Log headers for debugging
const authHeader = req.headers.get("authorization");
log.debug("Authorization header check", {
present: !!authHeader,
});
return null;
} catch (error) {
log.error("Authentication error", error);
return null;
}
}
/**
* Simplified version that just uses Clerk's built-in auth
* This should work with both session cookies and Bearer tokens
*/
export async function requireAuth(req: NextRequest): Promise<string> {
const userId = await getAuthUserId(req);
if (!userId) {
throw new Error("Unauthorized");
}
return userId;
}