update: auth login with username or email
This commit is contained in:
@@ -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, {
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user