Next.js 16, React 19, Monaco editor, Anthropic SDK, multi-provider AI, Wandbox Python execution, iframe HTML preview, SQLite auth + session persistence. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
24 lines
875 B
TypeScript
24 lines
875 B
TypeScript
import { NextRequest, NextResponse } from 'next/server';
|
|
import { db } from '@/db';
|
|
import { users } from '@/db/schema';
|
|
import { verifyPassword, signToken, setAuthCookie } from '@/lib/auth';
|
|
import { eq } from 'drizzle-orm';
|
|
|
|
export async function POST(req: NextRequest) {
|
|
const { email, password } = await req.json();
|
|
|
|
if (!email || !password) {
|
|
return NextResponse.json({ error: 'Email and password are required' }, { status: 400 });
|
|
}
|
|
|
|
const user = await db.select().from(users).where(eq(users.email, email)).get();
|
|
if (!user || !(await verifyPassword(password, user.passwordHash))) {
|
|
return NextResponse.json({ error: 'Invalid email or password' }, { status: 401 });
|
|
}
|
|
|
|
const token = await signToken({ userId: user.id, email: user.email });
|
|
await setAuthCookie(token);
|
|
|
|
return NextResponse.json({ user: { id: user.id, email: user.email } });
|
|
}
|