Files
next-fiber/app/api/auth/cookie-login/route.ts
Beyhan Oğur b2825e1698 first commit
2026-04-26 22:14:08 +03:00

97 lines
2.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { NextRequest, NextResponse } from "next/server";
import { cookies } from "next/headers";
import {
COOKIE_ACCESS,
COOKIE_REFRESH,
COOKIE_OPTS,
ACCESS_MAX_AGE,
REFRESH_MAX_AGE,
} from "@/lib/auth-cookies";
const BASE_URL =
process.env.BASE_API_URL ??
process.env.NEXT_PUBLIC_BASE_API_URL ??
"http://127.0.0.1:8080";
export async function POST(request: NextRequest) {
try {
const body = await request.json();
const { email, password } = body as { email?: string; password?: string };
if (!email || !password) {
return NextResponse.json(
{ error: "E-posta ve şifre gerekli." },
{ status: 400 }
);
}
let res: Response;
try {
res = await fetch(`${BASE_URL}/api/v1/auth/login`, {
method: "POST",
headers: {
"Content-Type": "application/json",
accept: "application/json",
},
body: JSON.stringify({ email: String(email).trim(), password }),
});
} catch (fetchErr) {
const msg =
process.env.NODE_ENV === "development" && fetchErr instanceof Error
? `Backend erişilemedi: ${fetchErr.message} (URL: ${BASE_URL})`
: "Giriş servisi şu an kullanılamıyor.";
return NextResponse.json({ error: msg }, { status: 502 });
}
let data: unknown;
try {
const text = await res.text();
data = text ? JSON.parse(text) : {};
} catch {
data = {};
}
if (!res.ok) {
const message =
(data as { detail?: string })?.detail ?? "Giriş başarısız";
return NextResponse.json(
{ error: message },
{ status: res.status >= 400 ? res.status : 500 }
);
}
const access_token = (data as { access_token?: string })?.access_token;
const refresh_token = (data as { refresh_token?: string })?.refresh_token;
const user = (data as { user?: unknown })?.user;
if (!access_token || !refresh_token) {
return NextResponse.json(
{
error:
process.env.NODE_ENV === "development"
? "Backend token döndürmedi."
: "Giriş yanıtı geçersiz.",
},
{ status: 502 }
);
}
const cookieStore = await cookies();
cookieStore.set(COOKIE_ACCESS, access_token, {
...COOKIE_OPTS,
maxAge: ACCESS_MAX_AGE,
});
cookieStore.set(COOKIE_REFRESH, refresh_token, {
...COOKIE_OPTS,
maxAge: REFRESH_MAX_AGE,
});
return NextResponse.json({ user });
} catch (e) {
const message =
process.env.NODE_ENV === "development" && e instanceof Error
? e.message
: "Sunucu hatası.";
return NextResponse.json({ error: message }, { status: 500 });
}
}