diff --git a/.changeset/clear-forks-ring.md b/.changeset/clear-forks-ring.md new file mode 100644 index 00000000000..4bf0550109e --- /dev/null +++ b/.changeset/clear-forks-ring.md @@ -0,0 +1,5 @@ +--- +'@clerk/backend': patch +--- + +Fix a case where handshakes would get triggered in a loop on cross origin requests in development. diff --git a/packages/backend/src/tokens/request.ts b/packages/backend/src/tokens/request.ts index 43ef997225e..096b30b4cbc 100644 --- a/packages/backend/src/tokens/request.ts +++ b/packages/backend/src/tokens/request.ts @@ -577,7 +577,8 @@ export const authenticateRequest: AuthenticateRequest = (async ( !authenticateContext.isSatellite && // We're on primary authenticateContext.secFetchDest === 'document' && // Document navigation authenticateContext.isCrossOriginReferrer() && // Came from different domain - !authenticateContext.isKnownClerkReferrer(); // Not from Clerk accounts portal or FAPI + !authenticateContext.isKnownClerkReferrer() && // Not from Clerk accounts portal or FAPI + authenticateContext.handshakeRedirectLoopCounter === 0; // Not in a redirect loop if (shouldForceHandshakeForCrossDomain) { return handleMaybeHandshakeStatus(