Skip to content

Commit 90acc76

Browse files
authored
fix(nextjs): Propagate treatPendingAsSignedOut to auth from clerkMiddleware (#6477)
1 parent 9368daf commit 90acc76

File tree

2 files changed

+28
-3
lines changed

2 files changed

+28
-3
lines changed

.changeset/tricky-planets-cry.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
---
2+
'@clerk/nextjs': patch
3+
---
4+
5+
Propagate `treatPendingAsSignedOut` to `auth` from `clerkMiddleware`
6+
7+
```ts
8+
export default clerkMiddleware(async (auth, req) => {
9+
// If the session has a `pending` status, `userId` will be `null` by default, treated as a signed-out state
10+
const { userId } = await auth()
11+
})
12+
```
13+
14+
```ts
15+
export default clerkMiddleware(async (auth, req) => {
16+
// If the session has a `pending` status, `userId` will be defined, treated as a signed-in state
17+
const { userId } = await auth({ treatPendingAsSignedOut: false })
18+
})
19+
```

packages/nextjs/src/server/clerkMiddleware.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import type { AuthObject, ClerkClient } from '@clerk/backend';
22
import type {
3+
AuthenticatedState,
34
AuthenticateRequestOptions,
45
ClerkRequest,
56
RedirectFun,
67
RequestState,
78
SignedInAuthObject,
89
SignedOutAuthObject,
10+
UnauthenticatedState,
911
} from '@clerk/backend/internal';
1012
import {
1113
AuthStatus,
@@ -214,7 +216,7 @@ export const clerkMiddleware = ((...args: unknown[]): NextMiddleware | NextMiddl
214216
const redirectToSignUp = createMiddlewareRedirectToSignUp(clerkRequest);
215217
const protect = await createMiddlewareProtect(clerkRequest, authObject, redirectToSignIn);
216218

217-
const authHandler = createMiddlewareAuthHandler(authObject, redirectToSignIn, redirectToSignUp);
219+
const authHandler = createMiddlewareAuthHandler(requestState, redirectToSignIn, redirectToSignUp);
218220
authHandler.protect = protect;
219221

220222
let handlerResult: Response = NextResponse.next();
@@ -427,14 +429,18 @@ const createMiddlewareProtect = (
427429
* - For machine tokens: validates token type and returns appropriate auth object
428430
*/
429431
const createMiddlewareAuthHandler = (
430-
rawAuthObject: AuthObject,
432+
requestState: AuthenticatedState<'session_token'> | UnauthenticatedState<'session_token'>,
431433
redirectToSignIn: RedirectFun<Response>,
432434
redirectToSignUp: RedirectFun<Response>,
433435
): ClerkMiddlewareAuth => {
434436
const authHandler = async (options?: GetAuthOptions) => {
437+
const rawAuthObject = requestState.toAuth({ treatPendingAsSignedOut: options?.treatPendingAsSignedOut });
435438
const acceptsToken = options?.acceptsToken ?? TokenType.SessionToken;
436439

437-
const authObject = getAuthObjectForAcceptedToken({ authObject: rawAuthObject, acceptsToken });
440+
const authObject = getAuthObjectForAcceptedToken({
441+
authObject: rawAuthObject,
442+
acceptsToken,
443+
});
438444

439445
if (authObject.tokenType === TokenType.SessionToken && isTokenTypeAccepted(TokenType.SessionToken, acceptsToken)) {
440446
return Object.assign(authObject, {

0 commit comments

Comments
 (0)