Skip to content

Commit d5123b3

Browse files
fix: use fresh user data when refreshing sessions (#36)
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
1 parent 3f62a6e commit d5123b3

File tree

2 files changed

+32
-16
lines changed

2 files changed

+32
-16
lines changed

src/session.spec.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,20 @@ describe('session', () => {
717717
authenticateWithRefreshToken.mockResolvedValue({
718718
accessToken: 'new.valid.token',
719719
refreshToken: 'new.refresh.token',
720+
user: {
721+
object: 'user',
722+
id: 'user-1',
723+
724+
emailVerified: true,
725+
profilePictureUrl: null,
726+
firstName: 'Test',
727+
lastName: 'User',
728+
lastSignInAt: '2021-01-01T00:00:00Z',
729+
createdAt: '2021-01-01T00:00:00Z',
730+
updatedAt: '2021-01-01T00:00:00Z',
731+
externalId: null,
732+
},
733+
impersonator: undefined,
720734
} as AuthenticationResponse);
721735

722736
// 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

@@ -77,15 +78,15 @@ export async function refreshSession(request: Request, { organizationId }: { org
7778
} = getClaimsFromAccessToken(accessToken);
7879

7980
return {
80-
user: session.user,
81+
user,
8182
sessionId,
8283
accessToken,
8384
organizationId: newOrgId,
8485
role,
8586
permissions,
8687
entitlements,
8788
featureFlags,
88-
impersonator: session.impersonator || null,
89+
impersonator: impersonator ?? null,
8990
sealedSession: cookieSession.get('jwt'),
9091
headers: newSession.headers,
9192
};
@@ -119,20 +120,21 @@ async function updateSession(request: Request, debug: boolean) {
119120

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

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

131133
const newSession = {
132134
accessToken,
133135
refreshToken,
134-
user: session.user,
135-
impersonator: session.impersonator,
136+
user,
137+
impersonator,
136138
headers: {},
137139
};
138140

0 commit comments

Comments
 (0)