diff --git a/examples/react-oidc-demo/index.html b/examples/react-oidc-demo/index.html index 00be91c24..0bb0aea6f 100644 --- a/examples/react-oidc-demo/index.html +++ b/examples/react-oidc-demo/index.html @@ -13,6 +13,6 @@
- + diff --git a/examples/react-oidc-demo/src/MultiAuth.tsx b/examples/react-oidc-demo/src/MultiAuth.tsx index 3da6b0d46..66eff1d7f 100644 --- a/examples/react-oidc-demo/src/MultiAuth.tsx +++ b/examples/react-oidc-demo/src/MultiAuth.tsx @@ -16,8 +16,7 @@ const fetchWithLogs = (fetch: Fetch) => async (...params: Parameters) => return await fetch(url, options, ...rest); }; -const MultiAuth = ({ configurationName, handleConfigurationChange }) => { - console.log('MultiAuth', configurationName); +const MultiAuth = ({ configurationName, handleConfigurationChange }) => {; const { login, logout, isAuthenticated } = useOidc(configurationName); const { isAuthenticated: isAuthenticatedDefault } = useOidc('default'); const [fname, setFname] = useState(''); @@ -156,7 +155,7 @@ export const MultiAuthContainer = () => { // console.log(`oidc:${configurationName}:${eventName}`, data); dispatch({ type: 'event', data: { name: `oidc:${configurationName}:${eventName}`, data } }); }; - console.log('MultiAuthContainer', configurationName); + return ( <> { oidc.tokens = tokens; const getLoginParams = serviceWorker.getLoginParams(oidc.configurationName); // @ts-ignore - oidc.timeoutId = autoRenewTokens(oidc, oidc.tokens.refreshToken, oidc.tokens.expiresAt, getLoginParams.extras); + oidc.timeoutId = autoRenewTokens(oidc, oidc.tokens.expiresAt, getLoginParams.extras); const sessionState = await serviceWorker.getSessionStateAsync(); // @ts-ignore await oidc.startCheckSessionAsync(oidcServerConfiguration.check_session_iframe, configuration.client_id, sessionState); @@ -51,7 +51,7 @@ export const tryKeepSessionAsync = async (oidc: Oidc) =>{ oidc.tokens = setTokens(tokens, null, configuration.token_renew_mode); const getLoginParams = session.getLoginParams(); // @ts-ignore - oidc.timeoutId = autoRenewTokens(oidc, tokens.refreshToken, oidc.tokens.expiresAt, getLoginParams.extras); + oidc.timeoutId = autoRenewTokens(oidc, oidc.tokens.expiresAt, getLoginParams.extras); const sessionState = await session.getSessionStateAsync(); // @ts-ignore await oidc.startCheckSessionAsync(oidcServerConfiguration.check_session_iframe, configuration.client_id, sessionState); diff --git a/packages/oidc-client/src/oidc.ts b/packages/oidc-client/src/oidc.ts index bbd925d0b..94f4df974 100644 --- a/packages/oidc-client/src/oidc.ts +++ b/packages/oidc-client/src/oidc.ts @@ -79,7 +79,7 @@ export type InternalLoginCallback = { const loginCallbackWithAutoTokensRenewAsync = async (oidc) : Promise => { const { parsedTokens, callbackPath } = await oidc.loginCallbackAsync(); - oidc.timeoutId = autoRenewTokens(oidc, parsedTokens.refreshToken, parsedTokens.expiresAt); + oidc.timeoutId = autoRenewTokens(oidc, parsedTokens.expiresAt); return { callbackPath }; }; @@ -292,7 +292,7 @@ Please checkout that you are using OIDC hook inside a 4) { @@ -374,11 +374,11 @@ Please checkout that you are using OIDC hook inside a { this.renewTokensPromise = null; return result; diff --git a/packages/oidc-client/src/renewTokens.ts b/packages/oidc-client/src/renewTokens.ts index db7fd883b..64166370b 100644 --- a/packages/oidc-client/src/renewTokens.ts +++ b/packages/oidc-client/src/renewTokens.ts @@ -1,15 +1,15 @@ import {initSession} from './initSession.js'; import {initWorkerAsync} from './initWorker.js'; import Oidc from './oidc.js'; -import {computeTimeLeft, setTokens} from './parseTokens.js'; +import {computeTimeLeft, setTokens, Tokens} from './parseTokens.js'; import timer from './timer.js'; import {OidcConfiguration, StringMap} from './types.js'; -async function syncTokens(oidc:Oidc, refreshToken, forceRefresh: boolean, extras: StringMap) { +async function syncTokens(oidc:Oidc, forceRefresh: boolean, extras: StringMap) { const updateTokens = (tokens) => { oidc.tokens = tokens; }; - const {tokens, status} = await oidc.synchroniseTokensAsync(refreshToken, 0, forceRefresh, extras, updateTokens); + const {tokens, status} = await oidc.synchroniseTokensAsync(0, forceRefresh, extras, updateTokens); const serviceWorker = await initWorkerAsync(oidc.configuration, oidc.configurationName); if (!serviceWorker) { @@ -24,7 +24,7 @@ async function syncTokens(oidc:Oidc, refreshToken, forceRefresh: boolean, extras return tokens; } -async function loadLatestTokensAsync(oidc, configuration) { +const loadLatestTokensAsync = async (oidc:Oidc, configuration:OidcConfiguration) :Promise => { const serviceWorker = await initWorkerAsync(configuration, oidc.configurationName); if (serviceWorker) { const oidcServerConfiguration = await oidc.initAsync(configuration.authority, configuration.authority_configuration); @@ -39,7 +39,7 @@ async function loadLatestTokensAsync(oidc, configuration) { } } -export async function renewTokensAndStartTimerAsync(oidc, refreshToken, forceRefresh = false, extras:StringMap = null) { +export async function renewTokensAndStartTimerAsync(oidc, forceRefresh = false, extras:StringMap = null) { const configuration = oidc.configuration; const lockResourcesName = `${configuration.client_id}_${oidc.configurationName}_${configuration.authority}`; @@ -48,14 +48,14 @@ export async function renewTokensAndStartTimerAsync(oidc, refreshToken, forceRef const serviceWorker = await initWorkerAsync(oidc.configuration, oidc.configurationName); if(configuration?.storage === window?.sessionStorage && !serviceWorker) { - tokens = await syncTokens(oidc, refreshToken, forceRefresh, extras); + tokens = await syncTokens(oidc, forceRefresh, extras); } else { tokens = await navigator.locks.request(lockResourcesName, { ifAvailable: true }, async (lock) => { if(!lock){ oidc.publishEvent(Oidc.eventNames.syncTokensAsync_lock_not_available, { lock: 'lock not available' }); return await loadLatestTokensAsync(oidc, configuration); } - return await syncTokens(oidc, refreshToken, forceRefresh, extras); + return await syncTokens(oidc, forceRefresh, extras); }); } @@ -66,19 +66,19 @@ export async function renewTokensAndStartTimerAsync(oidc, refreshToken, forceRef if (oidc.timeoutId) { // @ts-ignore - oidc.timeoutId = autoRenewTokens(oidc, tokens.refreshToken, oidc.tokens.expiresAt, extras); + oidc.timeoutId = autoRenewTokens(oidc, oidc.tokens.expiresAt, extras); } return oidc.tokens; } -export const autoRenewTokens = (oidc:Oidc, refreshToken, expiresAt, extras:StringMap = null) => { +export const autoRenewTokens = (oidc:Oidc, expiresAt, extras:StringMap = null) => { const refreshTimeBeforeTokensExpirationInSecond = oidc.configuration.refresh_time_before_tokens_expiration_in_second; return timer.setTimeout(async () => { const timeLeft = computeTimeLeft(refreshTimeBeforeTokensExpirationInSecond, expiresAt); const timeInfo = { timeLeft }; oidc.publishEvent(Oidc.eventNames.token_timer, timeInfo); - await renewTokensAndStartTimerAsync(oidc, refreshToken, false, extras); + await renewTokensAndStartTimerAsync(oidc, false, extras); }, 1000); }; @@ -118,7 +118,10 @@ export const syncTokensInfoAsync = (oidc: Oidc) => async (configuration:OidcConf nonce = await serviceWorker.getNonceAsync(); } else { const session = initSession(configurationName, configuration.storage ?? sessionStorage); - const { tokens, status } = await session.initAsync(); + let { tokens, status } = await session.initAsync(); + if(tokens){ + tokens = setTokens(tokens, oidc.tokens, configuration.token_renew_mode); + } if (!tokens) { return { tokens: null, status: 'LOGOUT_FROM_ANOTHER_TAB', nonce: nullNonce }; } else if (status === 'SESSIONS_LOST') { diff --git a/packages/oidc-client/src/silentLogin.ts b/packages/oidc-client/src/silentLogin.ts index 70932a974..319125944 100644 --- a/packages/oidc-client/src/silentLogin.ts +++ b/packages/oidc-client/src/silentLogin.ts @@ -131,7 +131,7 @@ export const defaultSilentLoginAsync = (window, configurationName, configuration oidc.tokens = silentResult.tokens; publishEvent(eventNames.token_aquired, {}); // @ts-ignore - oidc.timeoutId = autoRenewTokens(oidc, oidc.tokens.refreshToken, oidc.tokens.expiresAt, extras); + oidc.timeoutId = autoRenewTokens(oidc, oidc.tokens.expiresAt, extras); return {}; } } catch (e) {