diff options
Diffstat (limited to 'apps/web/server')
| -rw-r--r-- | apps/web/server/auth.ts | 31 |
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", |
