ai-bot/app/_lib/actions/auth.ts

49 lines
1.3 KiB
TypeScript

"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')
}