Fix admin authentication cookie handling

- Updated verifyAdminAuth to check for adminToken cookie in addition to Bearer token
- Added fallback to parse cookie from request headers when cookies() API fails
- This fixes admin dashboard login issues where authentication was failing

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-09-24 10:06:29 +00:00
parent 4303e48fac
commit 3b34d7518b

View File

@@ -1,6 +1,7 @@
import { NextRequest } from 'next/server'; import { NextRequest } from 'next/server';
import { verify, sign } from 'jsonwebtoken'; import { verify, sign } from 'jsonwebtoken';
import { prisma } from '@/lib/db'; import { prisma } from '@/lib/db';
import { cookies } from 'next/headers';
const JWT_SECRET = process.env.JWT_SECRET || 'fallback-secret-key'; const JWT_SECRET = process.env.JWT_SECRET || 'fallback-secret-key';
@@ -29,12 +30,34 @@ export interface AdminUser {
export async function verifyAdminAuth(request: NextRequest): Promise<AdminUser | null> { export async function verifyAdminAuth(request: NextRequest): Promise<AdminUser | null> {
try { try {
let token: string | null = null;
// First try to get token from Authorization header
const authHeader = request.headers.get('authorization'); const authHeader = request.headers.get('authorization');
if (!authHeader?.startsWith('Bearer ')) { if (authHeader?.startsWith('Bearer ')) {
return null; token = authHeader.substring(7);
} }
const token = authHeader.substring(7); // If no Authorization header, try to get token from cookie
if (!token) {
try {
const cookieStore = await cookies();
token = cookieStore.get('adminToken')?.value || null;
} catch (error) {
// If cookies() fails (e.g., in middleware), try to get cookie from request headers
const cookieHeader = request.headers.get('cookie');
if (cookieHeader) {
const matches = cookieHeader.match(/adminToken=([^;]+)/);
if (matches) {
token = matches[1];
}
}
}
}
if (!token) {
return null;
}
let payload: any; let payload: any;
try { try {