"use server"; import { createSession, deleteSession } from '@/app/_lib/session' import { redirect } from 'next/navigation' import { FormState, LoginFormSchema } from '../definitions' import { getUser } from '../data/user' import bcrypt from 'bcrypt'; export async function login(state: FormState, formData: FormData) { const _account = formData.get('account')?.toString() const validatedFields = LoginFormSchema.safeParse({ account: formData.get('account'), password: formData.get('password') }) if (!validatedFields.success) { return { errors: validatedFields.error.flatten().fieldErrors, } } const { account, password } = validatedFields.data if (!_account) { return { message: '用户名或者密码错误', } } const user = await getUser(account) if (!user) { return { message: '用户名或者密码错误', } } const passwordsMatch = await bcrypt.compare(password, user.password); if (!passwordsMatch) { return { message: '用户名或者密码错误', } } await createSession(user._id) // 5. Redirect user redirect('/admin') } export async function logout() { deleteSession() redirect('/admin/login') }