Skip to content

Commit b216c0d

Browse files
only update session if tokenSet has changed in handleAccessToken route handler. This conditional logic is present in getAccessToken() present in client.ts but absent in it's route couterpart in auth-client.ts
1 parent dbfd502 commit b216c0d

File tree

1 file changed

+20
-18
lines changed

1 file changed

+20
-18
lines changed

src/server/auth-client.ts

+20-18
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,21 @@ import packageJson from "../../package.json";
66
import {
77
AccessTokenError,
88
AccessTokenErrorCode,
9+
AccessTokenForConnectionError,
10+
AccessTokenForConnectionErrorCode,
911
AuthorizationCodeGrantError,
1012
AuthorizationError,
1113
BackchannelLogoutError,
1214
DiscoveryError,
13-
AccessTokenForConnectionError,
14-
AccessTokenForConnectionErrorCode,
1515
InvalidStateError,
1616
MissingStateError,
1717
OAuth2Error,
1818
SdkError
1919
} from "../errors";
2020
import {
21+
AccessTokenForConnectionOptions,
2122
AuthorizationParameters,
2223
ConnectionTokenSet,
23-
AccessTokenForConnectionOptions,
2424
LogoutToken,
2525
SessionData,
2626
StartInteractiveLoginOptions,
@@ -65,7 +65,6 @@ const DEFAULT_SCOPES = ["openid", "profile", "email", "offline_access"].join(
6565
" "
6666
);
6767

68-
6968
/**
7069
* A constant representing the grant type for federated connection access token exchange.
7170
*
@@ -616,10 +615,16 @@ export class AuthClient {
616615
expires_at: updatedTokenSet.expiresAt
617616
});
618617

619-
await this.sessionStore.set(req.cookies, res.cookies, {
620-
...session,
621-
tokenSet: updatedTokenSet
622-
});
618+
if (
619+
updatedTokenSet.accessToken !== session.tokenSet.accessToken ||
620+
updatedTokenSet.refreshToken !== session.tokenSet.refreshToken ||
621+
updatedTokenSet.expiresAt !== session.tokenSet.expiresAt
622+
) {
623+
await this.sessionStore.set(req.cookies, res.cookies, {
624+
...session,
625+
tokenSet: updatedTokenSet
626+
});
627+
}
623628

624629
return res;
625630
}
@@ -1016,19 +1021,20 @@ export class AuthClient {
10161021
tokenSet: TokenSet,
10171022
connectionTokenSet: ConnectionTokenSet | undefined,
10181023
options: AccessTokenForConnectionOptions
1019-
): Promise<[AccessTokenForConnectionError, null] | [null, ConnectionTokenSet]> {
1024+
): Promise<
1025+
[AccessTokenForConnectionError, null] | [null, ConnectionTokenSet]
1026+
> {
10201027
// If we do not have a refresh token
10211028
// and we do not have a connection token set in the cache or the one we have is expired,
10221029
// there is noting to retrieve and we return an error.
10231030
if (
10241031
!tokenSet.refreshToken &&
1025-
(!connectionTokenSet ||
1026-
connectionTokenSet.expiresAt <= Date.now() / 1000)
1032+
(!connectionTokenSet || connectionTokenSet.expiresAt <= Date.now() / 1000)
10271033
) {
10281034
return [
10291035
new AccessTokenForConnectionError(
10301036
AccessTokenForConnectionErrorCode.MISSING_REFRESH_TOKEN,
1031-
"A refresh token was not present, Connection Access Token requires a refresh token. The user needs to re-authenticate.",
1037+
"A refresh token was not present, Connection Access Token requires a refresh token. The user needs to re-authenticate."
10321038
),
10331039
null
10341040
];
@@ -1039,8 +1045,7 @@ export class AuthClient {
10391045
// we need to exchange the refresh token for a connection access token.
10401046
if (
10411047
tokenSet.refreshToken &&
1042-
(!connectionTokenSet ||
1043-
connectionTokenSet.expiresAt <= Date.now() / 1000)
1048+
(!connectionTokenSet || connectionTokenSet.expiresAt <= Date.now() / 1000)
10441049
) {
10451050
const params = new URLSearchParams();
10461051

@@ -1111,10 +1116,7 @@ export class AuthClient {
11111116
];
11121117
}
11131118

1114-
return [null, connectionTokenSet] as [
1115-
null,
1116-
ConnectionTokenSet
1117-
];
1119+
return [null, connectionTokenSet] as [null, ConnectionTokenSet];
11181120
}
11191121
}
11201122

0 commit comments

Comments
 (0)