diff --git a/demo/nextjs/lib/auth.ts b/demo/nextjs/lib/auth.ts index c23fbdf6..83c95db0 100644 --- a/demo/nextjs/lib/auth.ts +++ b/demo/nextjs/lib/auth.ts @@ -42,6 +42,22 @@ export const auth = betterAuth({ dialect, type: process.env.USE_MYSQL ? "mysql" : "sqlite", }, + databaseHooks: { + user: { + update: { + async before(user) { + if (user.emailVerified) { + return { + data: { + ...user, + emailVerifiedAt: new Date().toISOString(), + }, + }; + } + }, + }, + }, + }, emailVerification: { async sendVerificationEmail({ user, url }) { const res = await resend.emails.send({ diff --git a/packages/better-auth/src/api/routes/session-api.test.ts b/packages/better-auth/src/api/routes/session-api.test.ts index b778843f..530fb039 100644 --- a/packages/better-auth/src/api/routes/session-api.test.ts +++ b/packages/better-auth/src/api/routes/session-api.test.ts @@ -435,7 +435,7 @@ describe("cookie cache", async () => { }; const adapter = memoryAdapter(database); - const { client, testUser, auth } = await getTestInstance({ + const { client, testUser, auth, cookieSetter } = await getTestInstance({ database: adapter, session: { cookieCache: { @@ -498,4 +498,33 @@ describe("cookie cache", async () => { expect(session.data).not.toBeNull(); expect(fn).toHaveBeenCalledTimes(3); }); + + it("should reset cache when expires", async () => { + expect(fn).toHaveBeenCalledTimes(3); + await client.getSession({ + fetchOptions: { + headers, + }, + }); + vi.useFakeTimers(); + await vi.advanceTimersByTimeAsync(1000 * 60 * 10); // 10 minutes + await client.getSession({ + fetchOptions: { + headers, + onSuccess(context) { + cookieSetter(headers)(context); + }, + }, + }); + expect(fn).toHaveBeenCalledTimes(5); + await client.getSession({ + fetchOptions: { + headers, + onSuccess(context) { + cookieSetter(headers)(context); + }, + }, + }); + expect(fn).toHaveBeenCalledTimes(5); + }); }); diff --git a/packages/better-auth/src/api/routes/session.ts b/packages/better-auth/src/api/routes/session.ts index 6fab5a76..0feb34bd 100644 --- a/packages/better-auth/src/api/routes/session.ts +++ b/packages/better-auth/src/api/routes/session.ts @@ -1,7 +1,11 @@ import { APIError } from "better-call"; import { createAuthEndpoint, createAuthMiddleware } from "../call"; import { getDate } from "../../utils/date"; -import { deleteSessionCookie, setSessionCookie } from "../../cookies"; +import { + deleteSessionCookie, + setCookieCache, + setSessionCookie, +} from "../../cookies"; import { z } from "zod"; import type { BetterAuthOptions, @@ -229,7 +233,7 @@ export const getSession =