'use server'; import { cookies } from 'next/headers'; import { redirect } from 'next/navigation'; import { Argon2id } from 'oslo/password'; import { lucia } from 'app/lib/lucia'; import prisma from 'app/lib/db'; import { toast } from '@/components/ui/use-toast'; export type User = { id?: number, email: string, password: string, } const signIn = async (formData: FormData) => { console.log("signIn called!") const clientUser: User = { email: formData.get("email") as string, password: formData.get("password") as string } try { const user = await prisma.user.findFirst({ where: { email: clientUser.email }, }); if (!user) { console.log("NOT A USER") // https://www.robinwieruch.de/next-forms/ toast({ title: "Whoops!", description: "Username not recognised!" }) } const validPassword = await new Argon2id().verify( user.password, clientUser.password ); console.log(`VALID PASSWORD: ${validPassword}`) if (!validPassword) { // https://www.robinwieruch.de/next-forms console.log("NOT A VALID PASSWORD!") throw new Error('Incorrect email or password'); } const session = await lucia.createSession(user.id.toString(), {}); const sessionCookie = lucia.createSessionCookie(session.id); cookies().set( sessionCookie.name, sessionCookie.value, sessionCookie.attributes ); } catch (error) { // TODO: add error feedback yourself // https://www.robinwieruch.de/next-forms/ } redirect('/submission'); }; export { signIn };