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;