diff --git a/db/postgresql/migrations/14_add_auth_columns/migration.sql b/db/postgresql/migrations/14_add_auth_columns/migration.sql
new file mode 100644
index 000000000..3eefde2f1
--- /dev/null
+++ b/db/postgresql/migrations/14_add_auth_columns/migration.sql
@@ -0,0 +1,14 @@
+-- Add optional email and email_verified to user table for Auth.js compatibility
+ALTER TABLE "user"
+ ADD COLUMN IF NOT EXISTS email varchar(255),
+ ADD COLUMN IF NOT EXISTS email_verified timestamptz;
+
+-- Ensure email is unique if present
+DO $$
+BEGIN
+ IF NOT EXISTS (
+ SELECT 1 FROM pg_indexes WHERE schemaname = current_schema() AND indexname = 'user_email_key'
+ ) THEN
+ CREATE UNIQUE INDEX user_email_key ON "user" (email);
+ END IF;
+END $$;
\ No newline at end of file
diff --git a/src/app/api/auth/[...nextauth]/route.ts b/src/app/api/auth/[...nextauth]/route.ts
new file mode 100644
index 000000000..46c345ac7
--- /dev/null
+++ b/src/app/api/auth/[...nextauth]/route.ts
@@ -0,0 +1,6 @@
+import NextAuth from 'next-auth';
+import authOptions from '@/lib/authOptions';
+
+const handler = NextAuth(authOptions);
+
+export { handler as GET, handler as POST };
diff --git a/src/app/login/LoginForm.tsx b/src/app/login/LoginForm.tsx
index a808c622d..9bc9dfd22 100644
--- a/src/app/login/LoginForm.tsx
+++ b/src/app/login/LoginForm.tsx
@@ -9,29 +9,27 @@ import {
Icon,
} from 'react-basics';
import { useRouter } from 'next/navigation';
-import { useApi, useMessages } from '@/components/hooks';
-import { setUser } from '@/store/app';
-import { setClientAuthToken } from '@/lib/client';
+import { useMessages } from '@/components/hooks';
import Logo from '@/assets/logo.svg';
import styles from './LoginForm.module.css';
+import { signIn } from 'next-auth/react';
export function LoginForm() {
- const { formatMessage, labels, getMessage } = useMessages();
+ const { formatMessage, labels } = useMessages();
const router = useRouter();
- const { post, useMutation } = useApi();
- const { mutate, error, isPending } = useMutation({
- mutationFn: (data: any) => post('/auth/login', data),
- });
const handleSubmit = async (data: any) => {
- mutate(data, {
- onSuccess: async ({ token, user }) => {
- setClientAuthToken(token);
- setUser(user);
-
- router.push('/dashboard');
- },
+ const res = await signIn('credentials', {
+ username: data.username,
+ password: data.password,
+ redirect: false,
});
+
+ if (res?.error) {
+ throw new Error(res.error);
+ }
+
+ router.push('/dashboard');
};
return (
@@ -40,14 +38,14 @@ export function LoginForm() {