Skip to content

Commit 2ea4784

Browse files
committed
fix: route auth errors to login page
1 parent e76b50b commit 2ea4784

2 files changed

Lines changed: 26 additions & 2 deletions

File tree

app/login/page.tsx

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,34 @@ import { auth, signIn } from "@/lib/auth";
44
import { Button } from "@/components/ui/button";
55

66
type LoginPageProps = {
7-
searchParams: Promise<{ callbackUrl?: string }>;
7+
searchParams: Promise<{ callbackUrl?: string; error?: string }>;
88
};
99

10+
function getAuthErrorMessage(error?: string) {
11+
switch (error) {
12+
case "AccessDenied":
13+
return "SNU 구글 계정이 아니거나 이메일 인증이 완료되지 않아 로그인할 수 없습니다.";
14+
case "Configuration":
15+
return "서버의 Google 로그인 설정 또는 외부 연결 상태를 확인해야 합니다.";
16+
case "OAuthCallback":
17+
case "OAuthSignin":
18+
return "Google 로그인 처리 중 문제가 발생했습니다. 잠시 후 다시 시도하세요.";
19+
case undefined:
20+
return null;
21+
default:
22+
return "로그인에 실패했습니다. 다시 시도해도 반복되면 서버 로그를 확인하세요.";
23+
}
24+
}
25+
1026
export default async function LoginPage({ searchParams }: LoginPageProps) {
1127
const session = await auth();
1228
if (session?.user) {
1329
redirect(session.user.approved ? "/" : "/pending");
1430
}
1531

16-
const { callbackUrl } = await searchParams;
32+
const { callbackUrl, error } = await searchParams;
1733
const callback = callbackUrl ?? "/";
34+
const errorMessage = getAuthErrorMessage(error);
1835

1936
async function signInWithGoogle() {
2037
"use server";
@@ -32,6 +49,12 @@ export default async function LoginPage({ searchParams }: LoginPageProps) {
3249
</p>
3350
</div>
3451

52+
{errorMessage ? (
53+
<div className="w-full rounded-md border border-destructive/40 bg-destructive/10 px-4 py-3 text-sm text-destructive">
54+
{errorMessage}
55+
</div>
56+
) : null}
57+
3558
<form action={signInWithGoogle} className="w-full">
3659
<Button type="submit" className="w-full" size="lg">
3760
SNU 구글로 계속하기

auth.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export const authConfig = {
2626
],
2727
pages: {
2828
signIn: "/login",
29+
error: "/login",
2930
},
3031
callbacks: {
3132
// signIn callback 의 도메인 검증은 server-only (DB 안 건드리지만 안전하게 lib/auth 에 둔다).

0 commit comments

Comments
 (0)