fix(POS-FIX-12): proxy usa mismo host que navegador para cookies
This commit is contained in:
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user