Skip to content

Commit 1ff3dd1

Browse files
authored
fix: use fresh user data when refreshing sessions (#75)
1 parent d00e8c1 commit 1ff3dd1

File tree

2 files changed

+46
-16
lines changed

2 files changed

+46
-16
lines changed

src/session.spec.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -743,6 +743,20 @@ describe('session', () => {
743743
authenticateWithRefreshToken.mockResolvedValue({
744744
accessToken: 'new.valid.token',
745745
refreshToken: 'new.refresh.token',
746+
user: {
747+
object: 'user',
748+
id: 'user-1',
749+
email: 'test@example.com',
750+
emailVerified: true,
751+
profilePictureUrl: null,
752+
firstName: 'Test',
753+
lastName: 'User',
754+
lastSignInAt: '2021-01-01T00:00:00Z',
755+
createdAt: '2021-01-01T00:00:00Z',
756+
updatedAt: '2021-01-01T00:00:00Z',
757+
externalId: null,
758+
},
759+
impersonator: undefined,
746760
} as AuthenticationResponse);
747761

748762
// Mock different JWT decoding results for expired vs new token
@@ -907,6 +921,20 @@ describe('session', () => {
907921
authenticateWithRefreshToken.mockResolvedValue({
908922
accessToken: 'new.valid.token',
909923
refreshToken: 'new.refresh.token',
924+
user: {
925+
object: 'user',
926+
id: 'user-1',
927+
email: 'test@example.com',
928+
emailVerified: true,
929+
profilePictureUrl: null,
930+
firstName: 'Test',
931+
lastName: 'User',
932+
lastSignInAt: '2021-01-01T00:00:00Z',
933+
createdAt: '2021-01-01T00:00:00Z',
934+
updatedAt: '2021-01-01T00:00:00Z',
935+
externalId: null,
936+
},
937+
impersonator: undefined,
910938
} as AuthenticationResponse);
911939

912940
// Mock JWT decoding

src/session.ts

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -45,17 +45,18 @@ export async function refreshSession(request: Request, { organizationId }: { org
4545
}
4646

4747
try {
48-
const { accessToken, refreshToken } = await getWorkOS().userManagement.authenticateWithRefreshToken({
49-
clientId: getConfig('clientId'),
50-
refreshToken: session.refreshToken,
51-
organizationId,
52-
});
48+
const { accessToken, refreshToken, user, impersonator } =
49+
await getWorkOS().userManagement.authenticateWithRefreshToken({
50+
clientId: getConfig('clientId'),
51+
refreshToken: session.refreshToken,
52+
organizationId,
53+
});
5354

5455
const newSession = {
5556
accessToken,
5657
refreshToken,
57-
user: session.user,
58-
impersonator: session.impersonator,
58+
user,
59+
impersonator,
5960
headers: {} as Record<string, string>,
6061
};
6162

@@ -76,14 +77,14 @@ export async function refreshSession(request: Request, { organizationId }: { org
7677
} = getClaimsFromAccessToken(accessToken);
7778

7879
return {
79-
user: session.user,
80+
user,
8081
sessionId,
8182
accessToken,
8283
organizationId: newOrgId,
8384
role,
8485
permissions,
8586
entitlements,
86-
impersonator: session.impersonator || null,
87+
impersonator: impersonator ?? null,
8788
sealedSession: cookieSession.get('jwt'),
8889
headers: newSession.headers,
8990
};
@@ -117,20 +118,21 @@ async function updateSession(request: Request, debug: boolean) {
117118

118119
const { organizationId } = getClaimsFromAccessToken(session.accessToken);
119120
// If the session is invalid (i.e. the access token has expired) attempt to re-authenticate with the refresh token
120-
const { accessToken, refreshToken } = await getWorkOS().userManagement.authenticateWithRefreshToken({
121-
clientId: getConfig('clientId'),
122-
refreshToken: session.refreshToken,
123-
organizationId,
124-
});
121+
const { accessToken, refreshToken, user, impersonator } =
122+
await getWorkOS().userManagement.authenticateWithRefreshToken({
123+
clientId: getConfig('clientId'),
124+
refreshToken: session.refreshToken,
125+
organizationId,
126+
});
125127

126128
// istanbul ignore next
127129
if (debug) console.log(`Refresh successful. New access token ends in ${accessToken.slice(-10)}`);
128130

129131
const newSession = {
130132
accessToken,
131133
refreshToken,
132-
user: session.user,
133-
impersonator: session.impersonator,
134+
user,
135+
impersonator,
134136
headers: {},
135137
};
136138

0 commit comments

Comments
 (0)