Files
Lovemap/app/api/auth/login/route.ts
T

72 lines
1.2 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server';
import { getDBConnexion } from '../../utils';
import { compareSync } from 'bcrypt';
type RequestBody = {
username?: string;
password?: string;
};
export const POST = async (req: NextRequest) => {
const { username, password }: RequestBody = await req.json();
if (!username || !password) {
return NextResponse.json(
{
error: true,
message: 'Missing username or password field in request body',
},
{
status: 400,
}
);
}
try {
const pool = getDBConnexion();
const { rows } = await pool.query(
`SELECT * FROM "user" WHERE "username"=$1 LIMIT 1;`,
[username]
);
await pool.end();
if (rows.length != 1) {
return NextResponse.json({
error: true,
message: 'User not found',
});
}
const { id, password: hashedPassword } = rows[0];
if (!compareSync(password, hashedPassword)) {
return NextResponse.json(
{
error: true,
message: 'Wrong password',
},
{
status: 403,
}
);
}
return NextResponse.json({
token: id,
});
} catch (error) {
console.error(error);
return NextResponse.json(
{
error: true,
message: 'Internal error',
},
{
status: 500,
}
);
}
};