Skip to content

Commit 44557eb

Browse files
committed
Forward initial session status to signed out object
1 parent 01197f1 commit 44557eb

File tree

5 files changed

+17
-9
lines changed

5 files changed

+17
-9
lines changed

.changeset/tender-brooms-look.md

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
---
2-
'@clerk/nextjs': patch
2+
'@clerk/nextjs': minor
33
---
44

5-
Introduce `treatPendingAsSignedOut` to `auth`, `getAuth` and server-side control components
5+
Introduce `treatPendingAsSignedOut` option to `getAuth` and `auth` from `clerkMiddleware`
6+
7+
By default, `treatPendingAsSignedOut` is set to `true`, which means pending sessions are treated as signed-out. You can set this option to `false` to treat pending sessions as authenticated.
68

79
```ts
810
const { userId } = auth({ treatPendingAsSignedOut: false })

packages/backend/src/tokens/authObjects.ts

+7-3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import type {
55
JwtPayload,
66
ServerGetToken,
77
ServerGetTokenOptions,
8+
SessionStatusClaim,
89
SharedSignedInAuthObjectProperties,
910
} from '@clerk/types';
1011

@@ -37,7 +38,7 @@ export type SignedInAuthObject = SharedSignedInAuthObjectProperties & {
3738
export type SignedOutAuthObject = {
3839
sessionClaims: null;
3940
sessionId: null;
40-
sessionStatus: null;
41+
sessionStatus: SessionStatusClaim | null;
4142
actor: null;
4243
userId: null;
4344
orgId: null;
@@ -113,11 +114,14 @@ export function signedInAuthObject(
113114
/**
114115
* @internal
115116
*/
116-
export function signedOutAuthObject(debugData?: AuthObjectDebugData): SignedOutAuthObject {
117+
export function signedOutAuthObject(
118+
debugData?: AuthObjectDebugData,
119+
initialSessionStatus?: SessionStatusClaim,
120+
): SignedOutAuthObject {
117121
return {
118122
sessionClaims: null,
119123
sessionId: null,
120-
sessionStatus: null,
124+
sessionStatus: initialSessionStatus ?? null,
121125
userId: null,
122126
actor: null,
123127
orgId: null,

packages/backend/src/tokens/authStatus.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ export type SignedInState = {
2727
afterSignInUrl: string;
2828
afterSignUpUrl: string;
2929
isSignedIn: true;
30-
toAuth: (opts?: PendingSessionOptions) => SignedInAuthObject;
30+
toAuth: <T extends PendingSessionOptions | undefined = undefined>(
31+
opts?: T,
32+
) => T extends undefined ? SignedInAuthObject : SignedInAuthObject | SignedOutAuthObject;
3133
headers: Headers;
3234
token: string;
3335
};
@@ -102,7 +104,7 @@ export function signedIn(
102104
// @ts-expect-error Dynamically return `SignedOutAuthObject` based on options
103105
toAuth: ({ treatPendingAsSignedOut = true } = {}) => {
104106
if (treatPendingAsSignedOut && authObject.sessionStatus === 'pending') {
105-
return signedOutAuthObject();
107+
return signedOutAuthObject(undefined, authObject.sessionStatus);
106108
}
107109

108110
return authObject;

packages/nextjs/src/server/createGetAuth.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export const createAsyncGetAuth = ({
5353
/**
5454
* Previous known as `createGetAuth`. We needed to create a sync and async variant in order to allow for improvements
5555
* that required dynamic imports (using `require` would not work).
56-
* It powers the synchronous top-level api `getAuh()`.
56+
* It powers the synchronous top-level api `getAuth()`.
5757
*/
5858
export const createSyncGetAuth = ({
5959
debugLoggerName,

packages/nextjs/src/server/data/getAuthDataFromRequest.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ export function getAuthDataFromRequest(
5959
}
6060

6161
if (treatPendingAsSignedOut && authObject.sessionStatus === 'pending') {
62-
authObject = signedOutAuthObject(options);
62+
authObject = signedOutAuthObject(options, authObject.sessionStatus);
6363
}
6464

6565
return authObject;

0 commit comments

Comments
 (0)