Skip to content

Commit 6194b47

Browse files
committed
Pass treatPendingAsSignedOut to auth on clerkMiddleware
1 parent adb29b6 commit 6194b47

File tree

2 files changed

+23
-9
lines changed

2 files changed

+23
-9
lines changed

packages/backend/src/tokens/authStatus.ts

+13-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { JwtPayload } from '@clerk/types';
1+
import type { JwtPayload, PendingSessionOptions } from '@clerk/types';
22

33
import { constants } from '../constants';
44
import type { TokenVerificationErrorReason } from '../errors';
@@ -27,7 +27,11 @@ export type SignedInState = {
2727
afterSignInUrl: string;
2828
afterSignUpUrl: string;
2929
isSignedIn: true;
30-
toAuth: () => SignedInAuthObject;
30+
toAuth: <TOptions extends PendingSessionOptions>(
31+
opts?: TOptions,
32+
) => TOptions extends { treatPendingAsSignedOut: false }
33+
? SignedOutAuthObject | SignedInAuthObject
34+
: SignedInAuthObject;
3135
headers: Headers;
3236
token: string;
3337
};
@@ -99,7 +103,13 @@ export function signedIn(
99103
afterSignInUrl: authenticateContext.afterSignInUrl || '',
100104
afterSignUpUrl: authenticateContext.afterSignUpUrl || '',
101105
isSignedIn: true,
102-
toAuth: () => authObject,
106+
toAuth: <TOptions extends PendingSessionOptions>(opts?: TOptions) => {
107+
if (opts?.treatPendingAsSignedOut === false) {
108+
return authObject;
109+
}
110+
111+
return authObject;
112+
},
103113
headers,
104114
token,
105115
};

packages/nextjs/src/server/clerkMiddleware.ts

+10-6
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { AuthObject, ClerkClient } from '@clerk/backend';
22
import type { AuthenticateRequestOptions, ClerkRequest, RedirectFun, RequestState } from '@clerk/backend/internal';
33
import { AuthStatus, constants, createClerkRequest, createRedirect } from '@clerk/backend/internal';
44
import { parsePublishableKey } from '@clerk/shared/keys';
5+
import type { PendingSessionOptions } from '@clerk/types';
56
import { notFound as nextjsNotFound } from 'next/navigation';
67
import type { NextMiddleware, NextRequest } from 'next/server';
78
import { NextResponse } from 'next/server';
@@ -41,7 +42,7 @@ export type ClerkMiddlewareAuthObject = AuthObject & {
4142
};
4243

4344
export interface ClerkMiddlewareAuth {
44-
(): Promise<ClerkMiddlewareAuthObject>;
45+
(opts?: PendingSessionOptions): Promise<ClerkMiddlewareAuthObject>;
4546

4647
protect: AuthProtect;
4748
}
@@ -182,11 +183,14 @@ export const clerkMiddleware = ((...args: unknown[]): NextMiddleware | NextMiddl
182183
const redirectToSignUp = createMiddlewareRedirectToSignUp(clerkRequest);
183184
const protect = await createMiddlewareProtect(clerkRequest, authObject, redirectToSignIn);
184185

185-
const authObjWithMethods: ClerkMiddlewareAuthObject = Object.assign(authObject, {
186-
redirectToSignIn,
187-
redirectToSignUp,
188-
});
189-
const authHandler = () => Promise.resolve(authObjWithMethods);
186+
const authHandler = (opts?: PendingSessionOptions) => {
187+
const authObjWithMethods: ClerkMiddlewareAuthObject = Object.assign(requestState.toAuth(opts), {
188+
redirectToSignIn,
189+
redirectToSignUp,
190+
});
191+
192+
return Promise.resolve(authObjWithMethods);
193+
};
190194
authHandler.protect = protect;
191195

192196
let handlerResult: Response = NextResponse.next();

0 commit comments

Comments
 (0)