fix: safari cookie issue

This commit is contained in:
Michael Freno
2026-01-13 19:19:00 -05:00
parent b612d12a51
commit 48f01b6171
4 changed files with 39 additions and 4 deletions

View File

@@ -1660,17 +1660,33 @@ export const authRouter = createTRPCRouter({
});
}
// Step 4: Refresh CSRF token
// Step 4: Force response headers to be sent immediately
// This is critical for Safari to receive the new session cookies
// Safari is very strict about cookie updates from fetch responses
try {
const headers = event.node?.res?.getHeaders?.() || {};
console.log(
"[Token Refresh] Response headers set:",
Object.keys(headers)
);
} catch (e) {
// Headers already sent or not available - that's OK
}
// Step 5: Refresh CSRF token
setCSRFToken(event);
// Step 5: Opportunistic cleanup (serverless-friendly)
// Step 6: Opportunistic cleanup (serverless-friendly)
import("~/server/token-cleanup")
.then((module) => module.opportunisticCleanup())
.catch((err) => console.error("Opportunistic cleanup failed:", err));
return {
success: true,
message: "Token refreshed successfully"
message: "Token refreshed successfully",
// Return new session ID for Safari fallback
// If Safari doesn't apply cookies, client can use this to restore
sessionId: newSession.sessionId
};
} catch (error) {
console.error("Token refresh error:", error);

View File

@@ -232,7 +232,7 @@ export async function createAuthSession(
// Explicitly seal/flush the session to ensure cookie is written
// This is important in serverless environments where response might stream early
const { sealSession } = await import("vinxi/http");
sealSession(event, configWithMaxAge);
await sealSession(event, configWithMaxAge);
console.log("[Session Create] Session sealed");