-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmiddleware.ts
63 lines (49 loc) · 1.62 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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import { NextRequest, NextResponse } from "next/server"
import { getLocale, hasPathnameLocale } from "@/utils/i18n"
import { cookies } from "next/headers"
import {
isSessionValid,
COOKIE_NAME as SESSION_COOKIE_NAME,
} from "@/utils/auth"
export async function middleware(request: NextRequest) {
const { pathname } = request.nextUrl
// Auth
// -------------
// 1. Ignore todo lo que no sea de nuestra ruta /auth
if (pathname.startsWith("/auth") && pathname !== "/auth/login") {
const allCookies = await cookies()
// 2. Verificar si hay una cookie de sesión válida
const hasSession = await isSessionValid(
allCookies.get(SESSION_COOKIE_NAME)?.value,
)
// 3. Si la hay, puede continuar
if (hasSession) {
return
}
// 4. Si no, redireccionar a la página de inicio de sesión
return NextResponse.redirect(new URL("/auth/login", request.nextUrl))
}
// I18n
// -------------
// 1. Ignore todo lo que no sea de nuestra ruta /i18n
if (!pathname.startsWith("/i18n")) return
// 2. Si el path ya contiene un local, ignorelo (ya esta ok)
// e.j.: /i18n/es
const hasLocal = hasPathnameLocale(pathname)
if (hasLocal) return
// 3. Si no hay local, agregar el local a la URL
// e.j.: /i18n -> /i18n/es
const locale = getLocale({
"accept-language": request.headers.get("Accept-Language") || "",
})
request.nextUrl.pathname = `${pathname}/${locale}`
return NextResponse.redirect(request.nextUrl)
}
export const config = {
matcher: [
// Skip all internal paths (_next)
"/((?!_next).*)",
// Optional: only run on root (/) URL
// '/'
],
}