mirror of
https://github.com/better-auth/better-auth.git
synced 2026-10-30 01:19:23 -05:00
fix(client): apply rate limit focus refetch regardless of session state (#7048)
Co-authored-by: Alex Yang <himself65@outlook.com>
This commit is contained in:
committed by
Alex Yang
co-authored by
Alex Yang
parent
016ba1df7e
commit
bf42379be3
@@ -172,7 +172,7 @@ describe("session-refresh", () => {
|
||||
vi.useRealTimers();
|
||||
});
|
||||
|
||||
it("should allow refetch on focus when session is null even within rate limit", async () => {
|
||||
it("should rate limit refetch on focus when session is null", async () => {
|
||||
const sessionAtom: SessionAtom = atom({
|
||||
data: {
|
||||
user: { id: "1", email: "test@test.com" },
|
||||
@@ -223,15 +223,15 @@ describe("session-refresh", () => {
|
||||
// Immediately trigger another focus event (within rate limit window)
|
||||
manager.triggerRefetch({ event: "visibilitychange" });
|
||||
|
||||
// Signal should change because session is null (rate limit bypassed)
|
||||
expect(signalChangeCount).toBeGreaterThan(signalCountAfterFirstFocus);
|
||||
// Signal should NOT change because rate limit should apply even when session is null
|
||||
expect(signalChangeCount).toBe(signalCountAfterFirstFocus);
|
||||
|
||||
unsubscribeSignal();
|
||||
manager.cleanup();
|
||||
vi.useRealTimers();
|
||||
});
|
||||
|
||||
it("should allow refetch on focus when session is undefined even within rate limit", async () => {
|
||||
it("should rate limit refetch on focus when session is undefined", async () => {
|
||||
const sessionAtom: SessionAtom = atom({
|
||||
data: {
|
||||
user: { id: "1", email: "test@test.com" },
|
||||
@@ -282,8 +282,8 @@ describe("session-refresh", () => {
|
||||
// Immediately trigger another focus event (within rate limit window)
|
||||
manager.triggerRefetch({ event: "visibilitychange" });
|
||||
|
||||
// Signal should change because session is undefined (rate limit bypassed)
|
||||
expect(signalChangeCount).toBeGreaterThan(signalCountAfterFirstFocus);
|
||||
// Signal should NOT change because rate limit should apply even when session is undefined
|
||||
expect(signalChangeCount).toBe(signalCountAfterFirstFocus);
|
||||
|
||||
unsubscribeSignal();
|
||||
manager.cleanup();
|
||||
|
||||
@@ -100,13 +100,10 @@ export function createSessionRefreshManager(opts: SessionRefreshOptions) {
|
||||
// Rate limit: don't refetch on focus if a session request was made recently
|
||||
if (event?.event === "visibilitychange") {
|
||||
const timeSinceLastRequest = now() - state.lastSessionRequest;
|
||||
if (
|
||||
timeSinceLastRequest < FOCUS_REFETCH_RATE_LIMIT_SECONDS &&
|
||||
currentSession?.data !== null &&
|
||||
currentSession?.data !== undefined
|
||||
) {
|
||||
if (timeSinceLastRequest < FOCUS_REFETCH_RATE_LIMIT_SECONDS) {
|
||||
return;
|
||||
}
|
||||
state.lastSessionRequest = now();
|
||||
}
|
||||
|
||||
if (
|
||||
@@ -114,9 +111,6 @@ export function createSessionRefreshManager(opts: SessionRefreshOptions) {
|
||||
currentSession?.data === undefined ||
|
||||
event?.event === "visibilitychange"
|
||||
) {
|
||||
if (event?.event === "visibilitychange") {
|
||||
state.lastSessionRequest = now();
|
||||
}
|
||||
state.lastSync = now();
|
||||
sessionSignal.set(!sessionSignal.get());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user