From 8bee5ae1f379e67f66d3e1b1de63b721bf9d3ebf Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Fri, 18 Oct 2019 18:48:46 +0000 Subject: [PATCH] [CORL-721] SSO Logout Fix (#2652) * fix: hide logout button when jti is undefined * fix: improved local state init --- .../__snapshots__/initLocalState.spec.ts.snap | 1 + .../client/framework/lib/relay/localState.ts | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) 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");