Add user profile retrieval function

This commit is contained in:
Isuru Bimsara
2026-08-21 11:44:00 +05:30
parent 6a4fe852e5
commit 2a35d86ebf
4 changed files with 156 additions and 109 deletions
+27 -88
View File
@@ -29,7 +29,7 @@ const {
verifyPasswordResetToken,
deletePasswordReset,
sendPasswordResetEmail,
sendPasswordChangedEmail
sendPasswordChangedEmail,
} = require("../utils/passwordReset.utill");
const db = require("../models");
const { log } = require("../utils/consoleLog.utill");
@@ -250,7 +250,6 @@ exports.forgotPassword = async (req, res) => {
});
}
email = email.trim().toLowerCase();
if (!validateEmail(email)) {
@@ -292,151 +291,91 @@ exports.forgotPassword = async (req, res) => {
};
exports.resetPassword = async (req, res) => {
try {
const { token, newPassword, confirmPassword } = req.body;
const {
token,
newPassword,
confirmPassword,
} = req.body;
if (!token ||!newPassword || !confirmPassword) {
if (!token || !newPassword || !confirmPassword) {
return res.status(400).send({
success: false,
message:
"Token, new password and confirm password are required",
message: "Token, new password and confirm password are required",
});
}
if (
newPassword !==
confirmPassword
) {
if (newPassword !== confirmPassword) {
return res.status(400).send({
success: false,
message:
"Passwords do not match",
message: "Passwords do not match",
});
}
if (
!validatePassword(newPassword)
) {
if (!validatePassword(newPassword)) {
return res.status(400).send({
success: false,
message:
"Password does not meet the required criteria",
message: "Password does not meet the required criteria",
});
}
const verification =
await verifyPasswordResetToken(
token
);
const verification = await verifyPasswordResetToken(token);
if (!verification) {
return res.status(400).send({
success: false,
message:
"Reset token is invalid or expired",
message: "Reset token is invalid or expired",
});
}
const { userId, redisKey } = verification;
const {
userId,
redisKey,
} = verification;
const user =
await User.findByPk(userId);
const user = await User.findByPk(userId);
if (!user) {
await deletePasswordReset(
redisKey
);
await deletePasswordReset(redisKey);
return res.status(400).send({
success: false,
message:
"Reset token is invalid or expired",
message: "Reset token is invalid or expired",
});
}
const samePassword =
await checkPassword(
newPassword,
user.password
);
const samePassword = await checkPassword(newPassword, user.password);
if (samePassword) {
return res.status(400).send({
success: false,
message:
"New password must be different from the current password",
message: "New password must be different from the current password",
});
}
const hashedPassword = await hashPassword(newPassword);
const hashedPassword =
await hashPassword(
newPassword
);
user.password =
hashedPassword;
user.passwordChangedAt =
new Date();
user.password = hashedPassword;
user.passwordChangedAt = new Date();
await user.save();
await sendPasswordChangedEmail(
user.email,
user.firstName
);
await sendPasswordChangedEmail(user.email, user.firstName);
await deletePasswordReset(
redisKey
);
deleteAllUserSessions(
user.id
);
await deletePasswordReset(redisKey);
deleteAllUserSessions(user.id);
return res.status(200).send({
success: true,
message:
"Password reset successfully. Please login again.",
message: "Password reset successfully. Please login again.",
});
} catch (error) {
console.error(
"RESET PASSWORD ERROR:",
error
);
console.error("RESET PASSWORD ERROR:", error);
return res.status(500).send({
success: false,
message:
"Failed to reset password",
message: "Failed to reset password",
});
}
};
// Logout: Clear the JWT cookie
exports.logout = (req, res) => {
res.clearCookie("access_token", {