Access token JWT (packages/auth/src/tokens.ts) e o teto absoluto do cookie de sessão (duplicado em login/post-login/select-tenant/middleware) subiram de 15min/8h pra 12h. O refresh silencioso do middleware continua existindo e deslizando a sessão pra frente a cada requisição — 12h agora é só o teto de segurança pra quando esse refresh falhar (aba parada, logout em outro lugar), não o intervalo real de renovação. Verificado com login real: token decodificado mostra exp-iat = 12h exatas. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BFaBaBSQGhyXGEgtTYZGV8
41 lines
1.7 KiB
TypeScript
41 lines
1.7 KiB
TypeScript
import { NextResponse } from "next/server";
|
|
import { API_BASE_URL } from "@/lib/api";
|
|
import { sessionCookieName } from "@/lib/session";
|
|
|
|
export async function POST(request: Request) {
|
|
const { email, password } = await request.json();
|
|
|
|
const res = await fetch(`${API_BASE_URL}/auth/login`, {
|
|
method: "POST",
|
|
headers: { "Content-Type": "application/json" },
|
|
body: JSON.stringify({ email, password }),
|
|
cache: "no-store",
|
|
});
|
|
|
|
if (!res.ok) {
|
|
const body = await res.json().catch(() => ({ message: "Falha ao entrar" }));
|
|
return NextResponse.json({ message: body.message ?? "Falha ao entrar" }, { status: res.status });
|
|
}
|
|
|
|
const data = await res.json();
|
|
|
|
// Sessão gravada mesmo com senha pendente de troca (secao 199) — só dá
|
|
// pra chamar POST /auth/change-password autenticado, então o cookie
|
|
// precisa existir antes de mandar pra /trocar-senha. `mustChangePassword`
|
|
// devolvido aqui é só o sinal pro client escolher a próxima tela.
|
|
const response = NextResponse.json({ ok: true, mustChangePassword: Boolean(data.mustChangePassword) });
|
|
response.cookies.set(sessionCookieName(), JSON.stringify({ accessToken: data.accessToken, refreshToken: data.refreshToken }), {
|
|
httpOnly: true,
|
|
sameSite: "lax",
|
|
secure: process.env.NODE_ENV === "production",
|
|
path: "/",
|
|
// Call center: turno de agente pode passar de 8h — 12h é o teto
|
|
// absoluto do cookie mesmo com o refresh silencioso do middleware
|
|
// deslizando ele pra frente a cada requisição (o mesmo valor está
|
|
// duplicado em post-login/route.ts, select-tenant/actions.ts e
|
|
// middleware.ts — os 4 precisam ficar em sincronia).
|
|
maxAge: 60 * 60 * 12,
|
|
});
|
|
return response;
|
|
}
|