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 =