draw/src/controllers/authController.ts
Adrián Borrageiros Mourelos 0ebef51f5c SAVE
2025-05-13 12:22:20 +02:00

88 lines
2.0 KiB
TypeScript

import bcrypt from "bcryptjs";
import jwt from "jsonwebtoken";
import User from "../models/User";
import dbConnect from "@/lib/db/connection";
const JWT_SECRET = process.env.JWT_SECRET || "your-secret-key";
export async function register(data: {
username: string;
email: string;
password: string;
}) {
try {
await dbConnect();
const { username, email, password } = data;
const existingUser = await User.findOne({ $or: [{ email }, { username }] });
if (existingUser) {
return { error: "User already exists", status: 400 };
}
const hashedPassword = await bcrypt.hash(password, 10);
const user = await User.create({
username,
email,
password: hashedPassword,
});
const token = jwt.sign({ userId: user._id }, JWT_SECRET, {
expiresIn: "7d",
});
return {
token,
user: {
id: user._id,
username: user.username,
email: user.email,
},
};
} catch (error) {
console.error("Error en el registro:", error);
return { error: "Internal server error", status: 500 };
}
}
export async function loginUser(data: {
email: string;
password: string;
rememberMe?: boolean;
}) {
try {
await dbConnect();
const { email, password, rememberMe } = data;
const user = await User.findOne({ email });
if (!user) {
return { error: "Invalid credentials", status: 401 };
}
const isValidPassword = await bcrypt.compare(password, user.password);
if (!isValidPassword) {
return { error: "Invalid credentials", status: 401 };
}
let tokenOptions = {};
if (!rememberMe) {
tokenOptions = { expiresIn: "7d" };
}
const token = jwt.sign({ userId: user._id }, JWT_SECRET, tokenOptions);
return {
token,
user: {
id: user._id,
username: user.username,
email: user.email,
},
};
} catch (error) {
console.error("Error en el login:", error);
return { error: "Internal server error", status: 500 };
}
}