Files
anbar/src/app/api/auth/login/route.js
T

42 lines
1.5 KiB
JavaScript

import prisma from '@/lib/prisma';
import bcrypt from 'bcrypt';
import { signToken } from '@/lib/auth';
export async function POST(req) {
try {
const { username, password } = await req.json();
if (!username || !password) {
return Response.json({ error: 'نام کاربری و رمز عبور الزامی است.' }, { status: 400 });
}
const user = await prisma.user.findUnique({
where: { username }
});
if (!user) {
return Response.json({ error: 'کاربر یافت نشد.' }, { status: 404 });
}
const isMatch = await bcrypt.compare(password, user.password);
if (!isMatch) {
return Response.json({ error: 'رمز عبور اشتباه است.' }, { status: 401 });
}
let parsedRoles = user.roles;
if (typeof parsedRoles === 'string') {
try { parsedRoles = JSON.parse(parsedRoles); } catch (e) { parsedRoles = null; }
}
let userRoles = Array.isArray(parsedRoles) ? parsedRoles : (user.role === 'ADMIN' ? ['ADMIN'] : ['COUNTER']);
const token = signToken({ id: user.id, username: user.username, name: user.name, orgId: user.orgId, roles: userRoles, role: user.role });
return Response.json({ message: 'با موفقیت وارد شدید', token, user: { id: user.id, name: user.name, orgId: user.orgId, roles: userRoles, avatarUrl: user.avatarUrl } });
} catch (error) {
console.error(error);
return Response.json({ error: 'خطای سرور رخ داد.' }, { status: 500 });
}
}