-
Notifications
You must be signed in to change notification settings - Fork 0
/
middleware.ts
43 lines (35 loc) · 1.28 KB
/
middleware.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import { createMiddlewareClient } from '@supabase/auth-helpers-nextjs';
import { NextResponse } from 'next/server';
import createMiddleware from 'next-intl/middleware';
import type { NextRequest } from 'next/server';
import { localePrefix, locales, pathnames } from './config';
export async function middleware(req: NextRequest) {
const res = NextResponse.next();
const supabase = createMiddlewareClient({ req, res });
const {
data: { user },
} = await supabase.auth.getUser();
const url = req.nextUrl.clone();
const path = url.pathname;
const publicPaths = ['/login', '/updatepassword', '/forgotpassword', '/dashboard/news'];
const publicRoutes = locales.flatMap((locale) => publicPaths.map((path) => `/${locale}${path}`));
if (publicRoutes.includes(path) || locales.map((locale) => path.startsWith(`/${locale}/dashboard/profile`))) {
return NextResponse.next();
}
// User check logic for non-public routes
if (!user) {
const locale = req.nextUrl.locale || 'fr';
const basePath = `/${locale}`;
return NextResponse.redirect(new URL(`${basePath}/login`, req.url));
}
return NextResponse.next();
}
export default createMiddleware({
locales,
pathnames,
localePrefix,
defaultLocale: 'fr',
});
export const config = {
matcher: ['/((?!api|_next|static|public|favicon.ico).*)'],
};