Files
app-admin/app/login/actions.ts
2026-03-24 15:46:27 +03:00

48 lines
1.2 KiB
TypeScript

"use server";
import { db } from "@/db";
import { users } from "@/db/schema";
import { eq } from "drizzle-orm";
import bcrypt from "bcryptjs";
import { cookies } from "next/headers";
import { redirect } from "next/navigation";
export async function login(formData: FormData) {
const email = formData.get("email") as string;
const password = formData.get("password") as string;
if (!email || !password) {
return { error: "Email and password are required" };
}
const user = await db.query.users.findFirst({
where: eq(users.email, email),
});
if (!user || user.role !== "admin") {
return { error: "Invalid credentials or not an admin" };
}
const passwordMatch = await bcrypt.compare(password, user.password);
if (!passwordMatch) {
return { error: "Invalid credentials" };
}
const cookieStore = await cookies();
cookieStore.set("admin_session", "true", {
httpOnly: true,
secure: process.env.NODE_ENV === "production",
maxAge: 60 * 60 * 24, // 1 day
path: "/",
});
redirect("/");
}
export async function logout() {
const cookieStore = await cookies();
cookieStore.delete("admin_session");
redirect("/login");
}