fix(POS-FIX-12): proxy usa mismo host que navegador para cookies

This commit is contained in:
chattie
2026-08-24 08:45:25 +02:00
parent 23d2554dd0
commit 3cb7325a42
2 changed files with 19 additions and 10 deletions

View File

@@ -1,15 +1,20 @@
import { NextRequest, NextResponse } from 'next/server';
const BACKEND_URL = process.env.POS_BACKEND_URL ?? 'http://127.0.0.1:3000';
// Use same host as browser to preserve cookies. In production, use the actual backend URL.
function getBackendUrl(request: NextRequest): string {
if (process.env.POS_BACKEND_URL) {
return `${process.env.POS_BACKEND_URL}/${apiPath(request)}${request.nextUrl.search}`;
}
// Dev: use same host/port as browser to keep cookies working
const protocol = request.headers.get('x-forwarded-proto') ?? request.nextUrl.protocol;
const host = request.headers.get('x-forwarded-host') ?? request.nextUrl.host;
return `${protocol}//${host}/${apiPath(request)}${request.nextUrl.search}`;
}
function apiPath(request: NextRequest): string {
return request.nextUrl.pathname.replace(/^\/api\//, '');
}
function backendUrl(request: NextRequest): string {
return `${BACKEND_URL}/${apiPath(request)}${request.nextUrl.search}`;
}
function requestHeaders(request: NextRequest, hasBody = false): Headers {
const headers = new Headers();
const cookie = request.headers.get('cookie');
@@ -38,7 +43,7 @@ function proxyResponse(backendResponse: Response): NextResponse {
export async function GET(request: NextRequest) {
try {
const response = await fetch(backendUrl(request), {
const response = await fetch(getBackendUrl(request), {
headers: requestHeaders(request),
cache: 'no-store',
});
@@ -51,7 +56,7 @@ export async function GET(request: NextRequest) {
export async function POST(request: NextRequest) {
try {
const body = await request.text();
const response = await fetch(backendUrl(request), {
const response = await fetch(getBackendUrl(request), {
method: 'POST',
headers: requestHeaders(request, true),
body,
@@ -80,7 +85,7 @@ export async function POST(request: NextRequest) {
export async function DELETE(request: NextRequest) {
try {
const response = await fetch(backendUrl(request), {
const response = await fetch(getBackendUrl(request), {
method: 'DELETE',
headers: requestHeaders(request),
cache: 'no-store',