2025-01-21 18:41:27 +08:00
|
|
|
"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
|
2025-02-07 19:02:22 +08:00
|
|
|
redirect('/admin')
|
2025-01-21 18:41:27 +08:00
|
|
|
|
|
|
|
}
|
|
|
|
export async function logout() {
|
|
|
|
deleteSession()
|
|
|
|
redirect('/admin/login')
|
|
|
|
}
|