Untitled
unknown
javascript
7 months ago
3.4 kB
5
Indexable
import { NextResponse } from "next/server";
import { isAuthRedirectPage, isAuthRequiredPage } from "@/middlewares/utils/auth-page-check";
const authMiddleware = async (req) => {
const { url, nextUrl, cookies } = req;
const { value: token } = cookies.get("token") ?? { value: null };
const { value: i18next } = cookies.get("i18next") ?? { value: 'de' };
const isAuthRequired = isAuthRequiredPage(nextUrl.pathname);
const isAuthRedirect = isAuthRedirectPage(nextUrl.pathname);
try {
if(isAuthRequired && token) {
const auth = await fetch(`${process.env.SERVER_API_URL}/user/auth/check`, {
method: 'GET',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
cache: 'no-store'
});
if (auth.status !== 200) {
const response = NextResponse.redirect(nextUrl);
response.cookies.set("token", "", {
path: "/",
maxAge: 0,
domain: ".wastestop.de",
httpOnly: true,
secure: true,
sameSite: "Lax"
});
return response;
} else {
const data = await auth.json();
if (data.phone === false) {
const phoneTargetUrl = new URL(`/${i18next}/phone-verification`, url);
if (nextUrl.pathname !== phoneTargetUrl.pathname) {
return NextResponse.redirect(phoneTargetUrl);
}
return NextResponse.next();
} else if (data.phone === true && nextUrl.pathname === `/${i18next}/phone-verification`) {
return NextResponse.redirect(new URL(`/${i18next}`, url));
}
if (data.email === false) {
const emailTargetUrl = new URL(`/${i18next}/email/notice`, url);
const verifyUrlPrefix = `/${i18next}/email/verify`;
if (nextUrl.pathname !== emailTargetUrl.pathname && !nextUrl.pathname.startsWith(verifyUrlPrefix)) {
return NextResponse.redirect(emailTargetUrl);
}
return NextResponse.next();
} else if (data.email === true && (nextUrl.pathname === `/${i18next}/email/notice` || nextUrl.pathname.startsWith(`/${i18next}/email/verify`))) {
return NextResponse.redirect(new URL(`/${i18next}`, url));
}
return NextResponse.next();
}
}
if (isAuthRequired && !token) {
const searchParams = new URLSearchParams(nextUrl.searchParams);
searchParams.set("nextUrl", nextUrl.pathname);
return NextResponse.redirect(
new URL(`/${i18next}/login?${searchParams}`, url)
);
}
if (isAuthRedirect && token) {
return NextResponse.redirect(new URL(`/${i18next}`, url));
}
return NextResponse.next();
} catch (error) {
console.error("An error occurred while fetching auth:", error);
}
}
export default authMiddleware;Editor is loading...
Leave a Comment