aboutsummaryrefslogtreecommitdiffstats
path: root/apps/web/server
diff options
context:
space:
mode:
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",