aboutsummaryrefslogtreecommitdiffstats
path: root/apps/web/server
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2025-06-21 10:44:53 +0000
committerMohamed Bassem <me@mbassem.com>2025-06-21 10:45:36 +0000
commitf1f665f89cba21d4d448d27471d01a4d78a184ff (patch)
tree61a730db28e71bdfad5d27af976f5585fe637daa /apps/web/server
parent6c0bcca1d5f4c72d128e8ae0298e2e896d2b2e30 (diff)
downloadkarakeep-f1f665f89cba21d4d448d27471d01a4d78a184ff.tar.zst
fix: Fix oauth creation failure due to missing UserSettings table. Fixes #1583
Diffstat (limited to 'apps/web/server')
-rw-r--r--apps/web/server/auth.ts31
1 files changed, 24 insertions, 7 deletions
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<boolean> {
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<AdapterUser, "id">) => {
+ 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",