diff --git a/src/core/client/auth/local/__snapshots__/initLocalState.spec.ts.snap b/src/core/client/auth/local/__snapshots__/initLocalState.spec.ts.snap index 9561d9ec5..dee0ab7af 100644 --- a/src/core/client/auth/local/__snapshots__/initLocalState.spec.ts.snap +++ b/src/core/client/auth/local/__snapshots__/initLocalState.spec.ts.snap @@ -5,6 +5,7 @@ exports[`get access token from url 1`] = ` \\"__id\\": \\"client:root.local\\", \\"__typename\\": \\"Local\\", \\"accessToken\\": \\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIzMWIyNjU5MS00ZTlhLTQzODgtYTdmZi1lMWJkYzVkOTdjY2UifQ==\\", + \\"accessTokenExp\\": null, \\"accessTokenJTI\\": \\"31b26591-4e9a-4388-a7ff-e1bdc5d97cce\\", \\"view\\": \\"SIGN_IN\\", \\"error\\": null diff --git a/src/core/client/framework/lib/relay/localState.ts b/src/core/client/framework/lib/relay/localState.ts index f5ba7335e..f97578510 100644 --- a/src/core/client/framework/lib/relay/localState.ts +++ b/src/core/client/framework/lib/relay/localState.ts @@ -26,9 +26,22 @@ export function setAccessTokenInLocalState( localRecord.setValue(accessToken || "", "accessToken"); if (accessToken) { const { payload } = parseJWT(accessToken); - localRecord.setValue(payload.exp, "accessTokenExp"); - localRecord.setValue(payload.jti, "accessTokenJTI"); + // TODO: (cvle) maybe a timer to detect when accessToken has expired? + + // Set the exp if it's valid. + if (typeof payload.exp === "number") { + localRecord.setValue(payload.exp, "accessTokenExp"); + } else { + localRecord.setValue(null, "accessTokenExp"); + } + + // Set the jti if it's valid. + if (typeof payload.jti === "string" && payload.jti.length > 0) { + localRecord.setValue(payload.jti, "accessTokenJTI"); + } else { + localRecord.setValue(null, "accessTokenJTI"); + } } else { localRecord.setValue(null, "accessTokenExp"); localRecord.setValue(null, "accessTokenJTI");