diff --git a/packages/stack/src/lib/stack-app.ts b/packages/stack/src/lib/stack-app.ts index a416e214b..006390a7c 100644 --- a/packages/stack/src/lib/stack-app.ts +++ b/packages/stack/src/lib/stack-app.ts @@ -412,6 +412,15 @@ class _StackClientAppImpl { - const refreshToken = getCookie(this._refreshTokenCookieName) ?? getCookie('stack-refresh'); // keep old cookie name for backwards-compatibility + const getCurrentValue = (old: TokenObject | null) => { + const tokens = this._getTokensFromCookies({ + refreshTokenCookie: getCookie(this._refreshTokenCookieName) ?? getCookie('stack-refresh'), // keep old cookie name for backwards-compatibility + accessTokenCookie: getCookie(this._accessTokenCookieName), + }); return { - refreshToken, - - // if there is an access token in memory already, and the refresh token hasn't changed, don't update the - // access token based on cookies (access token cookies may be set by another project on the same domain) - // see the comment in _accessTokenCookieName for more information - accessToken: old !== null && refreshToken === old.refreshToken ? old.accessToken : getCookie(this._accessTokenCookieName), + refreshToken: tokens.refreshToken, + accessToken: tokens.accessToken ?? (old?.refreshToken === tokens.refreshToken ? old.accessToken : null), }; }; this._storedCookieTokenStore = new Store(getCurrentValue(null)); @@ -451,7 +459,7 @@ class _StackClientAppImpl { try { setOrDeleteCookie(this._refreshTokenCookieName, value.refreshToken, { maxAge: 60 * 60 * 24 * 365 }); - setOrDeleteCookie(this._accessTokenCookieName, value.accessToken, { maxAge: 60 * 60 * 24 }); + setOrDeleteCookie(this._accessTokenCookieName, value.accessToken ? JSON.stringify([value.refreshToken, value.accessToken]) : null, { maxAge: 60 * 60 * 24 }); deleteCookie('stack-refresh'); // delete cookie name from previous versions (for backwards-compatibility) hasSucceededInWriting = true; } catch (e) { @@ -478,15 +486,15 @@ class _StackClientAppImpl({ - refreshToken, - accessToken: getCookie(this._accessTokenCookieName), + const tokens = this._getTokensFromCookies({ + refreshTokenCookie: getCookie(this._refreshTokenCookieName) ?? getCookie('stack-refresh'), // keep old cookie name for backwards-compatibility + accessTokenCookie: getCookie(this._accessTokenCookieName), }); + const store = new Store(tokens); store.onChange((value) => { try { setOrDeleteCookie(this._refreshTokenCookieName, value.refreshToken, { maxAge: 60 * 60 * 24 * 365 }); - setOrDeleteCookie(this._accessTokenCookieName, value.accessToken, { maxAge: 60 * 60 * 24 }); + setOrDeleteCookie(this._accessTokenCookieName, value.accessToken ? JSON.stringify([value.refreshToken, value.accessToken]) : null, { maxAge: 60 * 60 * 24 }); } catch (e) { // ignore }