49 lines
1.1 KiB
TypeScript
49 lines
1.1 KiB
TypeScript
import { NextRequest, NextResponse } from "next/server";
|
|
import { ApiResponse } from "./hooks/use-api";
|
|
import { API_URL } from "./lib/constants";
|
|
import IUser from "./interfaces/IUser";
|
|
|
|
export async function middleware(request: NextRequest) {
|
|
const sessionCookie = request.cookies.get("auth_token")?.value;
|
|
// console.log(sessionCookie);
|
|
if (!sessionCookie) {
|
|
return NextResponse.redirect(
|
|
new URL(
|
|
`/login?redirectTo=${encodeURIComponent(request.url)}`,
|
|
request.url,
|
|
),
|
|
);
|
|
}
|
|
|
|
try {
|
|
console.log(API_URL);
|
|
const res = await fetch(`${API_URL}/users/me`, {
|
|
headers: { Authorization: `Bearer ${sessionCookie}` },
|
|
});
|
|
const js: ApiResponse<IUser> = await res.json();
|
|
if (js.status === "Error") {
|
|
console.log(js.message);
|
|
return NextResponse.redirect(
|
|
new URL(
|
|
`/login?redirectTo=${encodeURIComponent(request.url)}`,
|
|
request.url,
|
|
),
|
|
);
|
|
}
|
|
} catch (e: any) {
|
|
console.log(e);
|
|
return NextResponse.redirect(
|
|
new URL(
|
|
`/login?redirectTo=${encodeURIComponent(request.url)}`,
|
|
request.url,
|
|
),
|
|
);
|
|
}
|
|
|
|
return NextResponse.next();
|
|
}
|
|
|
|
export const config = {
|
|
matcher: ["/dashboard/:path*"],
|
|
};
|