From 096eacdaf0de86b302870acededd7785b106a0c5 Mon Sep 17 00:00:00 2001 From: Mauricio Antunes Date: Wed, 18 Feb 2026 08:06:07 -0300 Subject: [PATCH] fix(nextjs): prevent infinite handshake redirect loop on Netlify (#7857) Co-authored-by: Robert Soriano --- .changeset/public-emus-stay.md | 5 +++++ packages/nextjs/src/server/clerkMiddleware.ts | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 .changeset/public-emus-stay.md diff --git a/.changeset/public-emus-stay.md b/.changeset/public-emus-stay.md new file mode 100644 index 00000000000..22698bf9f75 --- /dev/null +++ b/.changeset/public-emus-stay.md @@ -0,0 +1,5 @@ +--- +'@clerk/nextjs': patch +--- + +Fix infinite handshake redirect loop when deploying Next.js apps with Clerk development instances to Netlify diff --git a/packages/nextjs/src/server/clerkMiddleware.ts b/packages/nextjs/src/server/clerkMiddleware.ts index 971a8705130..44fa0159889 100644 --- a/packages/nextjs/src/server/clerkMiddleware.ts +++ b/packages/nextjs/src/server/clerkMiddleware.ts @@ -21,6 +21,7 @@ import { TokenType, } from '@clerk/backend/internal'; import { parsePublishableKey } from '@clerk/shared/keys'; +import { handleNetlifyCacheInDevInstance } from '@clerk/shared/netlifyCacheHandler'; import { notFound as nextjsNotFound } from 'next/navigation'; import type { NextMiddleware, NextRequest } from 'next/server'; import { NextResponse } from 'next/server'; @@ -196,7 +197,13 @@ export const clerkMiddleware = ((...args: unknown[]): NextMiddleware | NextMiddl const locationHeader = requestState.headers.get(constants.Headers.Location); if (locationHeader) { - const res = NextResponse.redirect(locationHeader); + handleNetlifyCacheInDevInstance({ + locationHeader, + requestStateHeaders: requestState.headers, + publishableKey: requestState.publishableKey, + }); + + const res = NextResponse.redirect(requestState.headers.get(constants.Headers.Location) || locationHeader); requestState.headers.forEach((value, key) => { if (key === constants.Headers.Location) { return;