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 }); const { error, value } = loginSchema.validate(req.body, { abortEarly: false });
if (error) return res.status(400).json(setResponse([], 'Validation failed', 400)); 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()) { if (!captcha || captcha.toLowerCase() !== captchaText.toLowerCase()) {
return res.status(400).json(setResponse([], 'Invalid captcha', 400)); 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 // Set refresh token di cookie
res.cookie('refreshToken', tokens.refreshToken, { res.cookie('refreshToken', tokens.refreshToken, {

View File

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

View File

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