feat: integrate Cloudinary image upload, Instagram Feed, and fix Next.js warnings
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
import createMiddleware from 'next-intl/middleware';
|
||||
import { NextResponse } from 'next/server';
|
||||
import type { NextRequest } from 'next/server';
|
||||
import { jwtVerify } from 'jose';
|
||||
|
||||
// Create next-intl middleware
|
||||
const intlMiddleware = createMiddleware({
|
||||
locales: ['tr', 'en'],
|
||||
defaultLocale: 'tr',
|
||||
localePrefix: 'as-needed'
|
||||
});
|
||||
|
||||
export default async function middleware(req: NextRequest) {
|
||||
// Check if it's an admin route
|
||||
if (req.nextUrl.pathname.startsWith('/admin')) {
|
||||
// Allow access to login page
|
||||
if (req.nextUrl.pathname === '/admin/login') {
|
||||
return NextResponse.next();
|
||||
}
|
||||
|
||||
const token = req.cookies.get('admin_token')?.value;
|
||||
if (!token) {
|
||||
return NextResponse.redirect(new URL('/admin/login', req.url));
|
||||
}
|
||||
|
||||
try {
|
||||
const secret = new TextEncoder().encode(process.env.JWT_SECRET || 'fallback-secret-for-development-only-do-not-use-in-prod');
|
||||
await jwtVerify(token, secret);
|
||||
return NextResponse.next();
|
||||
} catch (err) {
|
||||
// Invalid token
|
||||
return NextResponse.redirect(new URL('/admin/login', req.url));
|
||||
}
|
||||
}
|
||||
|
||||
// Delegate non-admin routes to next-intl
|
||||
return intlMiddleware(req);
|
||||
}
|
||||
|
||||
export const config = {
|
||||
// Match all pathnames except for
|
||||
// - … if they start with `/api`, `/_next`, `/_vercel`
|
||||
// - … the ones containing a dot (e.g. `favicon.ico`)
|
||||
// Notice we removed 'admin' from exclusion list so it passes through our custom middleware
|
||||
matcher: ['/((?!api|_next|_vercel|.*\\..*).*)']
|
||||
};
|
||||
Reference in New Issue
Block a user