56 lines
1.4 KiB
Plaintext
56 lines
1.4 KiB
Plaintext
|
|
import { NextResponse } from "next/server";
|
|
import type { NextRequest } from "next/server";
|
|
|
|
// This function can be marked `async` if using `await` inside
|
|
export const middleware = async (request: NextRequest) => {
|
|
console.log("middleware");
|
|
console.log(request.method);
|
|
console.log(request.url);
|
|
|
|
const origin = request.headers.get("origin");
|
|
console.log(origin);
|
|
|
|
const { pathname } = request.nextUrl;
|
|
|
|
// CROS
|
|
const corsRespone = handleCors(request);
|
|
if (corsRespone) {
|
|
return setCorsHeaders(
|
|
NextResponse.redirect(new URL("/login", request.url))
|
|
);
|
|
}
|
|
};
|
|
|
|
function handleCors(req: NextRequest): NextResponse | null {
|
|
if (req.method === "OPTIONS") {
|
|
return new NextResponse(null, {
|
|
status: 204,
|
|
headers: {
|
|
"Access-Control-Allow-Origin": "*",
|
|
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
|
|
"Access-Control-Allow-Headers": "Content-Type, Authorization",
|
|
"Access-Control-Max-Age": "86400",
|
|
},
|
|
});
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function setCorsHeaders(res: NextResponse): NextResponse {
|
|
res.headers.set("Access-Control-Allow-Origin", "*");
|
|
res.headers.set(
|
|
"Access-Control-Allow-Methods",
|
|
"GET, POST, PUT, DELETE, OPTIONS"
|
|
);
|
|
res.headers.set(
|
|
"Access-Control-Allow-Headers",
|
|
"Content-Type, Authorization"
|
|
);
|
|
return res;
|
|
}
|
|
|
|
export const config = {
|
|
matcher: ["/((?!_next|static|favicon.ico|manifest).*)"],
|
|
};
|