daphnis/auth/components/signin/action.ts

48 lines
1.1 KiB
TypeScript
Raw Normal View History

2024-06-29 05:22:22 +00:00
"use server";
import { cookies } from "next/headers";
import { redirect } from "next/navigation";
import { Argon2id } from "oslo/password";
import { lucia } from "@/lib/lucia";
2024-06-29 05:46:07 +00:00
import { daphnis } from "@/lib/prisma";
2024-06-29 05:22:22 +00:00
const signIn = async (formData: FormData) => {
const formDataRaw = {
username: formData.get("username") as string,
password: formData.get("password") as string,
};
try {
2024-06-29 05:46:07 +00:00
const user = await daphnis.user.findUnique({
2024-06-29 05:22:22 +00:00
where: { username: formDataRaw.username },
});
if (!user) {
return { error: "Incorrect username" };
}
const validPassword = await new Argon2id().verify(
user.hashedPassword,
formDataRaw.password
);
if (!validPassword) {
return { error: "Incorrect password" };
}
const session = await lucia.createSession(user.id, {});
const sessionCookie = lucia.createSessionCookie(session.id);
cookies().set(
sessionCookie.name,
sessionCookie.value,
sessionCookie.attributes
);
} catch (error: any) {
return { error: "Sign-in failed: " + error.message };
}
redirect("/home");
};
export { signIn };