From f1f665f89cba21d4d448d27471d01a4d78a184ff Mon Sep 17 00:00:00 2001 From: Mohamed Bassem Date: Sat, 21 Jun 2025 10:44:53 +0000 Subject: fix: Fix oauth creation failure due to missing UserSettings table. Fixes #1583 --- apps/web/package.json | 4 ++-- apps/web/server/auth.ts | 31 ++++++++++++++++++++++++------- 2 files changed, 26 insertions(+), 9 deletions(-) (limited to 'apps/web') diff --git a/apps/web/package.json b/apps/web/package.json index 4d4e6dfd..ff6410f6 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -17,7 +17,7 @@ "lint:fix": "next lint --fix" }, "dependencies": { - "@auth/drizzle-adapter": "^1.4.2", + "@auth/drizzle-adapter": "~1.5.0", "@emoji-mart/data": "^1.1.2", "@emoji-mart/react": "^1.1.1", "@hookform/resolvers": "^3.3.4", @@ -67,7 +67,7 @@ "lexical": "^0.20.2", "lucide-react": "^0.501.0", "next": "14.2.25", - "next-auth": "^4.24.5", + "next-auth": "^4.24.11", "next-i18next": "^15.3.1", "next-pwa": "^5.6.0", "next-themes": "^0.3.0", diff --git a/apps/web/server/auth.ts b/apps/web/server/auth.ts index 67621a17..3d32f702 100644 --- a/apps/web/server/auth.ts +++ b/apps/web/server/auth.ts @@ -1,4 +1,4 @@ -import type { Adapter } from "next-auth/adapters"; +import { Adapter, AdapterUser } from "@auth/core/adapters"; import { DrizzleAdapter } from "@auth/drizzle-adapter"; import { and, count, eq } from "drizzle-orm"; import NextAuth, { @@ -6,6 +6,7 @@ import NextAuth, { getServerSession, NextAuthOptions, } from "next-auth"; +import { Adapter as NextAuthAdapater } from "next-auth/adapters"; import CredentialsProvider from "next-auth/providers/credentials"; import { Provider } from "next-auth/providers/index"; import requestIp from "request-ip"; @@ -19,6 +20,7 @@ import { } from "@karakeep/db/schema"; import serverConfig from "@karakeep/shared/config"; import { logAuthenticationError, validatePassword } from "@karakeep/trpc/auth"; +import { createUserRaw } from "@karakeep/trpc/routers/users"; type UserRole = "admin" | "user"; @@ -70,6 +72,26 @@ async function isAdmin(email: string): Promise { return res?.role == "admin"; } +const CustomProvider = (): Adapter => { + const adapter = DrizzleAdapter(db, { + usersTable: users, + accountsTable: accounts, + sessionsTable: sessions, + verificationTokensTable: verificationTokens, + }); + + return { + ...adapter, + createUser: async (user: Omit) => { + return await createUserRaw(db, { + name: user.name ?? "", + email: user.email, + emailVerified: user.emailVerified, + }); + }, + }; +}; + const providers: Provider[] = [ CredentialsProvider({ // The name to display on the sign in form (e.g. "Sign in with...") @@ -135,12 +157,7 @@ if (oauth.wellKnownUrl) { export const authOptions: NextAuthOptions = { // https://github.com/nextauthjs/next-auth/issues/9493 - adapter: DrizzleAdapter(db, { - usersTable: users, - accountsTable: accounts, - sessionsTable: sessions, - verificationTokensTable: verificationTokens, - }) as Adapter, + adapter: CustomProvider() as NextAuthAdapater, providers: providers, session: { strategy: "jwt", -- cgit v1.2.3-70-g09d2