Skip to content

Commit d1a8d8d

Browse files
authored
fix(nextjs): Pass keyless credentials to request data only missing explicit keys (#5085)
1 parent 74a43c0 commit d1a8d8d

File tree

3 files changed

+18
-7
lines changed

3 files changed

+18
-7
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@clerk/nextjs': patch
3+
---
4+
5+
Fixes the "Unable to verify request ..." error occured when switching keys from an application running on keyless and a regular claimed application and there is a user signed-in.

packages/nextjs/src/server/clerkMiddleware.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -201,10 +201,16 @@ export const clerkMiddleware: ClerkMiddleware = (...args: unknown[]) => {
201201
setRequestHeadersOnNextResponse(handlerResult, clerkRequest, { [constants.Headers.EnableDebug]: 'true' });
202202
}
203203

204-
decorateRequest(clerkRequest, handlerResult, requestState, resolvedParams, {
205-
publishableKey: keyless?.publishableKey,
206-
secretKey: keyless?.secretKey,
207-
});
204+
const keylessKeysForRequestData =
205+
// Only pass keyless credentials when there are no explicit keys
206+
secretKey === keyless?.secretKey
207+
? {
208+
publishableKey: keyless?.publishableKey,
209+
secretKey: keyless?.secretKey,
210+
}
211+
: {};
212+
213+
decorateRequest(clerkRequest, handlerResult, requestState, resolvedParams, keylessKeysForRequestData);
208214

209215
return handlerResult;
210216
});

packages/nextjs/src/server/utils.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ const KEYLESS_ENCRYPTION_KEY = 'clerk_keyless_dummy_key';
185185
**/
186186
export function encryptClerkRequestData(
187187
requestData: Partial<AuthenticateRequestOptions>,
188-
keylessMode: Pick<AuthenticateRequestOptions, 'publishableKey' | 'secretKey'>,
188+
keylessModeKeys: Pick<AuthenticateRequestOptions, 'publishableKey' | 'secretKey'>,
189189
) {
190190
const isEmpty = (obj: Record<string, any> | undefined) => {
191191
if (!obj) {
@@ -194,7 +194,7 @@ export function encryptClerkRequestData(
194194
return !Object.values(obj).some(v => v !== undefined);
195195
};
196196

197-
if (isEmpty(requestData) && isEmpty(keylessMode)) {
197+
if (isEmpty(requestData) && isEmpty(keylessModeKeys)) {
198198
return;
199199
}
200200

@@ -211,7 +211,7 @@ export function encryptClerkRequestData(
211211
? ENCRYPTION_KEY || assertKey(SECRET_KEY, () => errorThrower.throwMissingSecretKeyError())
212212
: ENCRYPTION_KEY || SECRET_KEY || KEYLESS_ENCRYPTION_KEY;
213213

214-
return AES.encrypt(JSON.stringify({ ...keylessMode, ...requestData }), maybeKeylessEncryptionKey).toString();
214+
return AES.encrypt(JSON.stringify({ ...keylessModeKeys, ...requestData }), maybeKeylessEncryptionKey).toString();
215215
}
216216

217217
/**

0 commit comments

Comments
 (0)