Game-Server/api/src/services/authService.js
2026-03-29 00:16:10 -03:00

60 lines
1.3 KiB
JavaScript

const User = require("../models/User");
const bcrypt = require("bcryptjs");
const jwt = require("jsonwebtoken");
const config = require("../config/config.js");
const register = async (userData) => {
const { username, email, password } = userData;
const userExists = await User.findOne({ email });
if (userExists) {
throw new Error("User already exists");
}
const salt = await bcrypt.genSalt(10);
const hashedPassword = await bcrypt.hash(password, salt);
const user = await User.create({
username,
email,
password: hashedPassword,
});
return {
_id: user._id,
username: user.username,
email: user.email,
token: generateToken(user._id),
};
};
const login = async (email, password) => {
const user = await User.findOne({ email });
if (!user) {
throw new Error("Invalid credentials");
}
const isMatch = await bcrypt.compare(password, user.password);
if (!isMatch) {
throw new Error("Invalid credentials");
}
return {
_id: user._id,
username: user.username,
email: user.email,
token: generateToken(user._id),
};
};
const generateToken = (id) => {
return jwt.sign({ id }, process.env.JWT_SECRET || "secret_key", {
expiresIn: "30d",
});
};
module.exports = {
register,
login,
};