update: auth login with username or email

This commit is contained in:
2025-10-09 03:36:17 +07:00
parent fdeb8eb26d
commit 0ae2903035
3 changed files with 15 additions and 7 deletions

View File

@@ -70,13 +70,13 @@ class AuthController {
const { error, value } = loginSchema.validate(req.body, { abortEarly: false });
if (error) return res.status(400).json(setResponse([], 'Validation failed', 400));
const { email, password, captcha, captchaText } = value;
const { identifier, password, captcha, captchaText } = value;
if (!captcha || captcha.toLowerCase() !== captchaText.toLowerCase()) {
return res.status(400).json(setResponse([], 'Invalid captcha', 400));
}
const { user, tokens } = await AuthService.login({ email, password });
const { user, tokens } = await AuthService.login({ identifier, password });
// Set refresh token di cookie
res.cookie('refreshToken', tokens.refreshToken, {

View File

@@ -27,7 +27,7 @@ const registerSchema = Joi.object({
})
});
const loginSchema = Joi.object({
email: Joi.string().email().required(),
identifier: Joi.string().required(),
password: Joi.string().required(),
captcha: Joi.string().required(),
captchaText: Joi.string().required()

View File

@@ -1,6 +1,7 @@
const {
getUserByUserEmailDb,
createUserDb
createUserDb,
getUserByUsernameDb
} = require('../db/user.db');
const { hashPassword, comparePassword } = require('../helpers/hashPassword');
const { ErrorHandler } = require('../helpers/error');
@@ -46,10 +47,17 @@ class AuthService {
}
// Login
static async login({ email, password }) {
const user = await getUserByUserEmailDb(email);
static async login({ identifier, password }) {
let user;
if (identifier.includes('@')) {
user = await getUserByUserEmailDb(identifier);
} else {
user = await getUserByUsernameDb(identifier);
}
if (!user) {
throw new ErrorHandler(401, 'Invalid credentials');
throw new ErrorHandler(401, 'Invalid credentials')
}
const passwordMatch = await comparePassword(password, user.user_password);