This commit is contained in:
2026-04-20 01:37:11 +07:00
parent 49b99289bb
commit 4d2c121fd5
2 changed files with 26 additions and 15 deletions

View File

@@ -18,18 +18,9 @@ export async function middleware(request: NextRequest) {
return NextResponse.next() return NextResponse.next()
} }
// 2. Kiểm tra token (cookies) // 2. Kiểm tra user data cookie (prioritize này để tránh redirect loop)
const token = request.cookies.get("token") || request.cookies.get("access_token")
const userDataCookie = request.cookies.get("userDataRedux") const userDataCookie = request.cookies.get("userDataRedux")
// 3. Nếu không có token, redirect về signin
if (!token) {
const signinUrl = new URL("/signin", request.url)
signinUrl.searchParams.set("from", pathname)
return NextResponse.redirect(signinUrl)
}
// 4. Kiểm tra role-based access
if (userDataCookie) { if (userDataCookie) {
try { try {
const userData = JSON.parse(userDataCookie.value) const userData = JSON.parse(userDataCookie.value)
@@ -37,16 +28,31 @@ export async function middleware(request: NextRequest) {
// Kiểm tra user có quyền truy cập route này không // Kiểm tra user có quyền truy cập route này không
if (!canAccessRoute(userRoles, pathname)) { if (!canAccessRoute(userRoles, pathname)) {
// Redirect về dashboard hoặc 403 page // Redirect về 403 page
return NextResponse.redirect(new URL("/error-403", request.url)) return NextResponse.redirect(new URL("/error-403", request.url))
} }
// User có quyền, cho qua
return NextResponse.next()
} catch (error) { } catch (error) {
console.error("Error parsing user data in middleware:", error) console.error("Error parsing user data in middleware:", error)
// Nếu lỗi parse, vẫn cho qua (để tránh infinite redirect) // Xóa cookie lỗi
return NextResponse.next() const response = NextResponse.redirect(new URL("/signin", request.url))
response.cookies.delete("userDataRedux")
return response
} }
} }
// 3. Kiểm tra token từ backend (HTTP-only cookie)
const token = request.cookies.get("token") || request.cookies.get("access_token")
// 4. Nếu không có token và không có user data, redirect về signin
if (!token) {
const signinUrl = new URL("/signin", request.url)
signinUrl.searchParams.set("from", pathname)
return NextResponse.redirect(signinUrl)
}
return NextResponse.next() return NextResponse.next()
} }

View File

@@ -77,7 +77,12 @@ export default function SignInForm() {
// Lưu user data vào Redux và cookies // Lưu user data vào Redux và cookies
dispatch(setUserData(data.data)); dispatch(setUserData(data.data));
saveUserToCookie(data.data); saveUserToCookie(data.data);
router.push("/");
// Sử dụng window.location để force reload, đảm bảo cookie được set
// và middleware check được cookie trước khi render page
setTimeout(() => {
window.location.href = "/";
}, 100);
} }
} else { } else {
toast.error("Email hoặc mật khẩu không đúng."); toast.error("Email hoặc mật khẩu không đúng.");