Skip to content
This repository was archived by the owner on Sep 8, 2025. It is now read-only.

Commit 8481937

Browse files
committed
change
1 parent 2ea6d25 commit 8481937

File tree

1 file changed

+29
-12
lines changed

1 file changed

+29
-12
lines changed

server/controller/authController.js

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -162,21 +162,26 @@ export const loginUser = async (req, res, next) => {
162162
try {
163163
const user = await findUserByUsername(username);
164164
if (!user) {
165-
return res.status(401).json({ status: "error", message: "Invalid credentials" });
165+
return res.status(401).json({ status: "error", message: "Invalid credentials." });
166166
}
167167

168168
if (user.role === "vendor" && user.status === "Pending") {
169-
return res.status(403).json({ status: "error", message: "Your account is pending approval by an admin." });
169+
return res.status(403).json({ status: "error", message: "Your account is pending admin approval." });
170170
}
171171

172172
const isPasswordValid = await bcrypt.compare(password, user.password);
173173
if (!isPasswordValid) {
174-
return res.status(401).json({ status: "error", message: "Invalid credentials" });
174+
return res.status(401).json({ status: "error", message: "Invalid credentials." });
175175
}
176176

177-
// Generate 6-digit 2FA code
177+
// Generate a temporary 6-digit 2FA code
178178
const code = Math.floor(100000 + Math.random() * 900000).toString();
179-
pending2FA.set(user.username, { code, expires: Date.now() + 5 * 60 * 1000 }); // 5 mins expiry
179+
180+
// Save code with expiry (5 minutes)
181+
pending2FA.set(user.username, {
182+
code,
183+
expires: Date.now() + 5 * 60 * 1000,
184+
});
180185

181186
await send2FACode(user.email, code);
182187

@@ -186,7 +191,7 @@ export const loginUser = async (req, res, next) => {
186191
username: user.username,
187192
});
188193
} catch (error) {
189-
handleError(error, next, "Login error");
194+
return handleError(error, next, "Login error");
190195
}
191196
};
192197

@@ -197,19 +202,30 @@ export const verify2FA = async (req, res, next) => {
197202
try {
198203
const user = await findUserByUsername(username);
199204
if (!user) {
200-
return res.status(401).json({ status: "error", message: "Invalid username" });
205+
return res.status(401).json({ status: "error", message: "Invalid username." });
201206
}
202207

203208
const record = pending2FA.get(username);
204-
if (!record || record.code !== code || Date.now() > record.expires) {
205-
return res.status(401).json({ status: "error", message: "Invalid or expired 2FA code" });
209+
210+
if (!record) {
211+
return res.status(401).json({ status: "error", message: "No 2FA request found. Please login again." });
212+
}
213+
214+
if (record.code !== code) {
215+
return res.status(401).json({ status: "error", message: "Invalid 2FA code." });
216+
}
217+
218+
if (Date.now() > record.expires) {
219+
pending2FA.delete(username);
220+
return res.status(401).json({ status: "error", message: "2FA code has expired." });
206221
}
207222

208223
pending2FA.delete(username);
209224

210225
const accessToken = TokenService.generateAccessToken(user);
211226
const refreshToken = TokenService.generateRefreshToken(user);
212227

228+
// Set secure HTTP-only cookies
213229
res.cookie("token", accessToken, {
214230
httpOnly: true,
215231
secure: process.env.NODE_ENV === "production",
@@ -222,22 +238,23 @@ export const verify2FA = async (req, res, next) => {
222238
sameSite: "Strict",
223239
});
224240

225-
logger.info("2FA verified. User logged in:", user._id);
241+
logger.info(`2FA verified for user: ${user._id}`);
226242

227243
return res.status(200).json({
228244
status: "success",
229-
message: "Login successful",
245+
message: "Login successful.",
230246
accessToken,
231247
refreshToken,
232248
user: {
249+
id: user._id,
233250
username: user.username,
234251
email: user.email,
235252
role: user.role,
236253
status: user.status,
237254
},
238255
});
239256
} catch (error) {
240-
handleError(error, next, "2FA verification error");
257+
return handleError(error, next, "2FA verification error");
241258
}
242259
};
243260

0 commit comments

Comments
 (0)