From dc1b0eee8a594a53690bf0a67cd28462ff666ba6 Mon Sep 17 00:00:00 2001 From: Bereket Engida Date: Fri, 15 Nov 2024 22:31:28 +0300 Subject: [PATCH] fix: multi-session listing removing cookies before they are initatied --- .../adapters/prisma-adapter/prisma-adapter.ts | 10 ++++-- .../src/plugins/multi-session/index.ts | 35 +++++++++---------- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/packages/better-auth/src/adapters/prisma-adapter/prisma-adapter.ts b/packages/better-auth/src/adapters/prisma-adapter/prisma-adapter.ts index a4558432ee..9fafe08f19 100644 --- a/packages/better-auth/src/adapters/prisma-adapter/prisma-adapter.ts +++ b/packages/better-auth/src/adapters/prisma-adapter/prisma-adapter.ts @@ -230,9 +230,13 @@ export const prismaAdapter = async delete(data) { const { model, where } = data; const whereClause = convertWhereClause(model, where); - await db[getModelName(model)].delete({ - where: whereClause, - }); + try { + await db[getModelName(model)].delete({ + where: whereClause, + }); + } catch (e) { + // If the record doesn't exist, we don't want to throw an error + } }, async deleteMany(data) { const { model, where } = data; diff --git a/packages/better-auth/src/plugins/multi-session/index.ts b/packages/better-auth/src/plugins/multi-session/index.ts index 1d190c0269..3ffaea2a47 100644 --- a/packages/better-auth/src/plugins/multi-session/index.ts +++ b/packages/better-auth/src/plugins/multi-session/index.ts @@ -54,25 +54,24 @@ export const multiSession = (options?: MultiSessionConfig) => { const sessions = await ctx.context.internalAdapter.findSessions(sessionIds); - const validSessions = sessions - .filter( - (session) => session && session.session.expiresAt > new Date(), - ) - .filter( - (session, index, self) => - index === self.findIndex((s) => s.user.id === session.user.id), - ); + const validSessions = sessions.filter( + (session) => session && session.session.expiresAt > new Date(), + ); - Object.entries(cookies) - .filter(([key]) => isMultiSessionCookie(key)) - .forEach(([key, value]) => { - if (!validSessions.some((s) => s.session.id === value)) { - ctx.setCookie(key, "", { - ...ctx.context.authCookies.sessionToken.options, - maxAge: 0, - }); - } - }); + for (const [key] of Object.entries(cookies).filter(([key]) => + isMultiSessionCookie(key), + )) { + const sessionId = await ctx.getSignedCookie( + key, + ctx.context.secret, + ); + if (!validSessions.some((s) => s.session.id === sessionId)) { + ctx.setCookie(key, "", { + ...ctx.context.authCookies.sessionToken.options, + maxAge: 0, + }); + } + } return ctx.json(validSessions); },