From 5c5053dd2c8cec884c2d0a6e413031917e83c487 Mon Sep 17 00:00:00 2001 From: Chen Ye Date: Tue, 10 Mar 2026 17:55:12 -0700 Subject: [PATCH] Fix Google Sign-In email cache issue on sign-out --- src/background/cloudAuth.js | 44 +++++++++++++++----------- src/options/components/SignInButton.js | 8 +++-- 2 files changed, 32 insertions(+), 20 deletions(-) diff --git a/src/background/cloudAuth.js b/src/background/cloudAuth.js index b63cf3bf9..e55024716 100644 --- a/src/background/cloudAuth.js +++ b/src/background/cloudAuth.js @@ -11,12 +11,14 @@ export const signInGoogle = async () => { const authCode = await getAuthCode(); const { accessToken, expiresIn, refreshToken } = await getRefreshTokens(authCode); const email = await getEmail(accessToken); - setSettings("signedInEmail", email); - setSettings("accessToken", accessToken); - setSettings("refreshToken", refreshToken); - setTokenExpiration(expiresIn); - setSettings("lastSyncTime", 0); - setSettings("removedQueue", []); + await Promise.all([ + setSettings("signedInEmail", email), + setSettings("accessToken", accessToken), + setSettings("refreshToken", refreshToken), + setTokenExpiration(expiresIn), + setSettings("lastSyncTime", 0), + setSettings("removedQueue", []) + ]); return true; } catch { return false; @@ -30,11 +32,13 @@ export const signOutGoogle = async () => { const refreshToken = getSettings("refreshToken"); revokeToken(accessToken); revokeToken(refreshToken); - setSettings("signedInEmail", ""); - setSettings("accessToken", ""); - setSettings("refreshToken", ""); - setSettings("lastSyncTime", 0); - setSettings("removedQueue", []); + await Promise.all([ + setSettings("signedInEmail", ""), + setSettings("accessToken", ""), + setSettings("refreshToken", ""), + setSettings("lastSyncTime", 0), + setSettings("removedQueue", []) + ]); return true; } catch { return false; @@ -144,7 +148,7 @@ const getEmail = async accessToken => { const setTokenExpiration = async expirationSec => { const currentTimeMs = Date.now(); - setSettings("tokenExpiration", currentTimeMs + expirationSec * 1000); + await setSettings("tokenExpiration", currentTimeMs + expirationSec * 1000); }; export const refreshAccessToken = async (shouldShowLogin = true) => { @@ -157,8 +161,10 @@ export const refreshAccessToken = async (shouldShowLogin = true) => { try { const { accessToken, expiresIn } = await getAccessToken(refreshToken); - setSettings("accessToken", accessToken); - setTokenExpiration(expiresIn); + await Promise.all([ + setSettings("accessToken", accessToken), + setTokenExpiration(expiresIn) + ]); return accessToken; } catch (e) { const currentEmail = getSettings("signedInEmail"); @@ -167,10 +173,12 @@ export const refreshAccessToken = async (shouldShowLogin = true) => { }); const { accessToken, expiresIn, refreshToken } = await getRefreshTokens(authCode); const email = await getEmail(accessToken); - setSettings("signedInEmail", email); - setSettings("accessToken", accessToken); - setSettings("refreshToken", refreshToken); - setTokenExpiration(expiresIn); + await Promise.all([ + setSettings("signedInEmail", email), + setSettings("accessToken", accessToken), + setSettings("refreshToken", refreshToken), + setTokenExpiration(expiresIn) + ]); return accessToken; } }; diff --git a/src/options/components/SignInButton.js b/src/options/components/SignInButton.js index b9fcf807a..facf07cfb 100644 --- a/src/options/components/SignInButton.js +++ b/src/options/components/SignInButton.js @@ -17,14 +17,18 @@ export default class SignInButton extends Component { const isSucceeded = await browser.runtime.sendMessage({ message: "signInGoogle" }); - if (isSucceeded) this.setState({ shouldSignIn: !this.state.shouldSignIn }); + if (isSucceeded) { + const response = await browser.storage.local.get("Settings"); + const signedInEmail = response.Settings?.signedInEmail || ""; + this.setState({ shouldSignIn: false, signedInEmail }); + } }; handleSignOutClick = async () => { const isSucceeded = await browser.runtime.sendMessage({ message: "signOutGoogle" }); - if (isSucceeded) this.setState({ shouldSignIn: !this.state.shouldSignIn }); + if (isSucceeded) this.setState({ shouldSignIn: true, signedInEmail: "" }); }; render() {