diff --git a/lib/components/secondary-device-qr-auth-context-provider.react.js b/lib/components/secondary-device-qr-auth-context-provider.react.js --- a/lib/components/secondary-device-qr-auth-context-provider.react.js +++ b/lib/components/secondary-device-qr-auth-context-provider.react.js @@ -32,7 +32,7 @@ import { getMessageForException } from '../utils/errors.js'; import { useDispatch, useSelector } from '../utils/redux-utils.js'; import { fullBackupSupport } from '../utils/services-utils.js'; -import { waitUntilDatabaseReady } from '../utils/wait-until-db-deleted.js'; +import { waitUntilDatabaseDeleted } from '../utils/wait-until-db-deleted.js'; type Props = { +children: React.Node, @@ -77,7 +77,23 @@ const [primaryDeviceID, setPrimaryDeviceID] = React.useState(); const [qrData, setQRData] = React.useState(); const [qrAuthFinished, setQRAuthFinished] = React.useState(false); + const loggedIn = useSelector(isLoggedIn); + const prevLoggedIn = React.useRef(loggedIn); + + const logoutStateResetPromise = React.useRef>(null); + + if (prevLoggedIn.current !== loggedIn) { + if (!loggedIn) { + logoutStateResetPromise.current = (async () => { + await logoutStateResetPromise.current; + await waitUntilDatabaseDeleted(); + logoutStateResetPromise.current = null; + })(); + } + + prevLoggedIn.current = loggedIn; + } const { setUnauthorizedDeviceID, @@ -92,7 +108,7 @@ const identityClient = identityContext?.identityClient; const openSecondaryQRAuth = React.useCallback(async () => { - await waitUntilDatabaseReady(); + await logoutStateResetPromise.current; const [ed25519, rawAESKey] = await Promise.all([ getContentSigningKey(),