Files
Portfolio/src/app/[locale]/dashboard/page.tsx
T
damjan_savicandClaude Sonnet 4.5 131c883425 fix: use connection() API to force dynamic rendering in Next.js 15 (qa-requested)
- Add connection() API call to guarantee dynamic rendering
- Fixes critical auth bypass where page was still being pre-rendered
- Previous fix (force-dynamic) was insufficient in Next.js 15
- connection() API is the official Next.js 15 recommendation

Resolves QA Session 2 Critical Issue #1

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-25 12:41:31 +01:00

54 lines
1.4 KiB
TypeScript

import { connection } from 'next/server';
import { setRequestLocale } from 'next-intl/server';
import type { Metadata } from 'next';
import { redirect } from 'next/navigation';
import DashboardContent from '@/components/auth/DashboardContent';
import { createClient } from '@/lib/supabase/server';
// Force dynamic rendering to ensure auth checks run on every request
export const dynamic = 'force-dynamic';
type Props = {
params: Promise<{ locale: string }>;
};
export async function generateMetadata({ params }: Props): Promise<Metadata> {
const { locale } = await params;
const titles: Record<string, string> = {
de: 'Dashboard | Damjan Savić',
en: 'Dashboard | Damjan Savić',
sr: 'Dashboard | Damjan Savić',
};
return {
title: titles[locale] || titles.de,
robots: {
index: false,
follow: false,
googleBot: {
index: false,
follow: false,
},
},
};
}
export default async function DashboardPage({ params }: Props) {
// CRITICAL: Use connection() API to guarantee dynamic rendering in Next.js 15
await connection();
const { locale } = await params;
setRequestLocale(locale);
// Server-side auth check (defense-in-depth)
const supabase = await createClient();
const { data: { user } } = await supabase.auth.getUser();
if (!user) {
redirect(`/${locale}/login`);
}
return <DashboardContent />;
}