Skip to content

Commit 703e4ce

Browse files
committed
fix(auth): only modify request when cookies exist and need changes
1 parent 6ad6491 commit 703e4ce

1 file changed

Lines changed: 23 additions & 25 deletions

File tree

api/src/routes/auth.ts

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -90,34 +90,32 @@ function removeStateCookies(cookieHeader: string | null): string {
9090
auth.on(['GET', 'POST'], '/*', async (c) => {
9191
const authInstance = createAuth(c.env);
9292

93+
// TEMPORARY: Cookie filtering for cross-subdomain migration
94+
// Can be removed after 2025-12-18
9395
if (c.env.ENVIRONMENT === 'production') {
9496
const originalCookies = c.req.raw.headers.get('cookie');
95-
let processedCookies = originalCookies;
96-
97-
// For sign-in routes: remove ALL state cookies so Better Auth creates a fresh one
98-
// This prevents state_mismatch when old cookies exist on api.thestack.cl
99-
if (c.req.path.includes('/sign-in/')) {
100-
processedCookies = removeStateCookies(originalCookies);
101-
} else {
102-
// For other routes (callback, get-session, etc): just filter duplicates
103-
processedCookies = filterDuplicateCookies(originalCookies);
104-
}
10597

106-
// Only create new request if cookies were actually modified
107-
if (processedCookies !== originalCookies) {
108-
// Clone the request first - body is a ReadableStream that can only be read once
109-
const clonedRequest = c.req.raw.clone();
110-
const newHeaders = new Headers(clonedRequest.headers);
111-
newHeaders.set('cookie', processedCookies || '');
112-
113-
const newRequest = new Request(clonedRequest.url, {
114-
method: clonedRequest.method,
115-
headers: newHeaders,
116-
body: clonedRequest.body,
117-
redirect: clonedRequest.redirect,
118-
});
119-
120-
return authInstance.handler(newRequest);
98+
// Only process if there are actual cookies
99+
if (originalCookies) {
100+
let processedCookies: string;
101+
102+
// For sign-in routes: remove ALL state cookies so Better Auth creates a fresh one
103+
if (c.req.path.includes('/sign-in/')) {
104+
processedCookies = removeStateCookies(originalCookies);
105+
} else {
106+
// For other routes (callback, get-session, etc): just filter duplicates
107+
processedCookies = filterDuplicateCookies(originalCookies);
108+
}
109+
110+
// Only create new request if cookies were actually modified
111+
if (processedCookies && processedCookies !== originalCookies) {
112+
const newHeaders = new Headers(c.req.raw.headers);
113+
newHeaders.set('cookie', processedCookies);
114+
115+
// Use Request constructor with existing request as base - handles body cloning internally
116+
const newRequest = new Request(c.req.raw, { headers: newHeaders });
117+
return authInstance.handler(newRequest);
118+
}
121119
}
122120
}
123121

0 commit comments

Comments
 (0)