Compare commits
5
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6d9042ac0f | ||
|
|
95c8416754 | ||
|
|
b514bdc472 | ||
|
|
dfa35542c5 | ||
|
|
f2d7e947d7 |
@@ -0,0 +1,17 @@
|
|||||||
|
import "@/app/styles/base.css";
|
||||||
|
|
||||||
|
export const metadata = {
|
||||||
|
title: "유역하수도 포탈",
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function AuthLayout({
|
||||||
|
children,
|
||||||
|
}: {
|
||||||
|
children: React.ReactNode;
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<html lang="ko">
|
||||||
|
<body>{children}</body>
|
||||||
|
</html>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@ import type { Metadata } from "next";
|
|||||||
import { App } from "@/app";
|
import { App } from "@/app";
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "유역하수도 통합 정보플랫폼",
|
title: "유역하수도 포탈",
|
||||||
};
|
};
|
||||||
|
|
||||||
export default App;
|
export default App;
|
||||||
@@ -1,17 +1,9 @@
|
|||||||
import { cookies } from "next/headers";
|
import { cookies } from "next/headers";
|
||||||
import { NextResponse } from "next/server";
|
import { NextResponse } from "next/server";
|
||||||
import {
|
import { COOKIE_DOMAIN, REFRESH_TOKEN } from "@/shared/config";
|
||||||
ACCESS_TOKEN,
|
|
||||||
AUTH_USER_ID,
|
|
||||||
CLAIM_NAME,
|
|
||||||
REFRESH_TOKEN,
|
|
||||||
} from "@/shared/config";
|
|
||||||
|
|
||||||
export async function POST() {
|
export async function POST() {
|
||||||
const cookieStore = await cookies();
|
const cookieStore = await cookies();
|
||||||
cookieStore.delete(ACCESS_TOKEN);
|
cookieStore.delete({ name: REFRESH_TOKEN, domain: COOKIE_DOMAIN });
|
||||||
cookieStore.delete(REFRESH_TOKEN);
|
|
||||||
cookieStore.delete(AUTH_USER_ID);
|
|
||||||
cookieStore.delete(CLAIM_NAME);
|
|
||||||
return NextResponse.json({ message: "Logged out" }, { status: 200 });
|
return NextResponse.json({ message: "Logged out" }, { status: 200 });
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
import type { Metadata } from "next";
|
||||||
|
import Image from "next/image";
|
||||||
|
|
||||||
|
import "@/app/styles/base.css";
|
||||||
|
import "@/app/styles/components.css";
|
||||||
|
|
||||||
|
export const metadata: Metadata = {
|
||||||
|
title: "유역하수도 포탈",
|
||||||
|
description: "페이지가 존재하지 않습니다. 관리자에게 문의하여 주십시오.",
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function GlobalNotFound() {
|
||||||
|
return (
|
||||||
|
<html lang="ko">
|
||||||
|
<body>
|
||||||
|
<main className="flex min-h-screen flex-col items-center justify-center bg-[#f0f4f8] px-4 py-16">
|
||||||
|
<div className="mb-16 text-center">
|
||||||
|
<h1 className="text-[3.2rem] font-bold leading-snug tracking-tight">
|
||||||
|
<span className="text-primary">유역하수도 포탈</span>에 오신 것을
|
||||||
|
환영합니다.
|
||||||
|
</h1>
|
||||||
|
<p className="mt-6 text-[2rem] text-[#666]">
|
||||||
|
오류가 발생하였습니다.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<section className="card card-border flex w-full max-w-[72rem] flex-col items-center !rounded-2xl !py-16">
|
||||||
|
<Image
|
||||||
|
src="/images/magnifying-glass-with-warning.png"
|
||||||
|
alt=""
|
||||||
|
width={280}
|
||||||
|
height={280}
|
||||||
|
className="size-[28rem] object-contain"
|
||||||
|
/>
|
||||||
|
<p className="mt-4 text-[2.4rem] font-bold text-[#444]">
|
||||||
|
페이지가 존재하지 않습니다.
|
||||||
|
</p>
|
||||||
|
<p className="mt-2 text-[1.6rem] text-[#666]">
|
||||||
|
관리자에게 문의하여 주십시오
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -7,6 +7,7 @@ const nextConfig: NextConfig = {
|
|||||||
output: "standalone",
|
output: "standalone",
|
||||||
experimental: {
|
experimental: {
|
||||||
proxyTimeout: 600000,
|
proxyTimeout: 600000,
|
||||||
|
globalNotFound: true,
|
||||||
},
|
},
|
||||||
eslint: {
|
eslint: {
|
||||||
ignoreDuringBuilds: true,
|
ignoreDuringBuilds: true,
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 483 KiB |
@@ -89,6 +89,7 @@ async function silentRefresh(): Promise<void> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function logout(): Promise<void> {
|
async function logout(): Promise<void> {
|
||||||
|
await fetch("/api/auth/logout", { method: "POST" });
|
||||||
tokenManager.clearAuthToken();
|
tokenManager.clearAuthToken();
|
||||||
clearDeviceId();
|
clearDeviceId();
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import presetConfig from "../../tailwind.config.preset";
|
|||||||
export default {
|
export default {
|
||||||
presets: [presetConfig],
|
presets: [presetConfig],
|
||||||
content: [
|
content: [
|
||||||
|
"./app/**/*.{js,ts,jsx,tsx}",
|
||||||
"./src/**/*.{js,ts,jsx,tsx}",
|
"./src/**/*.{js,ts,jsx,tsx}",
|
||||||
"../../packages/common/components/src/ui/**/*.{js,ts,jsx,tsx}",
|
"../../packages/common/components/src/ui/**/*.{js,ts,jsx,tsx}",
|
||||||
],
|
],
|
||||||
|
|||||||
Reference in New Issue
Block a user