Skip to content

Commit 65656fb

Browse files
committed
send password recover email
1 parent 400790c commit 65656fb

File tree

3 files changed

+62
-0
lines changed

3 files changed

+62
-0
lines changed

Controllers/userAuthController.js

+38
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ const User = require('../Modals/userModels');
33
const ErrrorHandler = require('../Utils/errorHandler');
44
const catchAsyncErrors = require('../Middlewares/catchAsyncErrors');
55
const sendToken = require('../Utils/JwtToken');
6+
const sendEmail = require('../Utils/sendEmail');
67

78
// Register a user => /api/v1/register
89
exports.registerUser = catchAsyncErrors(async (req, res, next) => {
@@ -47,6 +48,43 @@ exports.loginUser = catchAsyncErrors(async (req, res, next) => {
4748
sendToken(user, 200, res);
4849
});
4950

51+
// Fotgot Password => /api/v1/password/forgot
52+
53+
exports.fotgotPassword = catchAsyncErrors(async (req, res, next) => {
54+
const user = await User.findOne({ email: req.body.email });
55+
if (!user) {
56+
return next(new ErrrorHandler('User not Found with this email', 404));
57+
}
58+
59+
// Get the reset token
60+
const resetToken = user.getResetPasswordToken();
61+
await user.save({ validateBeforeSave: false });
62+
63+
// Create reset password url
64+
const resetUrl = `${req.protocol}://${req.get(
65+
'host'
66+
)}/password/reset/${resetToken}`;
67+
68+
const message = `Your password reset token is as follow:\n\n${resetUrl}\n\nIf you have not requested this email, then ignore it.`;
69+
70+
try {
71+
await sendEmail({
72+
email: user.email,
73+
subject: 'E-commerce Password Recovery',
74+
message,
75+
});
76+
res.status(200).json({
77+
success: true,
78+
message: `Email sent to: ${user.email}`,
79+
});
80+
} catch (error) {
81+
user.resetPasswordToken = undefined;
82+
user.resetPasswordExpire = undefined;
83+
await user.save({ validateBeforeSave: false });
84+
return next(new ErrrorHandler(error.message, 500));
85+
}
86+
});
87+
5088
// LogOut User => api/v1/logOut
5189

5290
exports.logOutUser = catchAsyncErrors(async (req, res, next) => {

Routes/userAuth.js

+3
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@ const {
33
registerUser,
44
loginUser,
55
logOutUser,
6+
fotgotPassword,
67
} = require('../Controllers/userAuthController');
78
const router = express.Router();
89

910
// user Register
1011

1112
router.post('/register', registerUser);
1213
router.post('/login', loginUser);
14+
15+
router.post('/password/forgot', fotgotPassword);
1316
router.get('/logOut', logOutUser);
1417

1518
module.exports = router;

Utils/sendEmail.js

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
const nodemailer = require('nodemailer');
2+
3+
const sendEmail = async (options) => {
4+
const transporter = nodemailer.createTransport({
5+
host: process.env.SMTP_HOST,
6+
port: process.env.SMTP_PORT,
7+
auth: {
8+
user: process.env.SMTP_EMAIL,
9+
pass: process.env.SMTP_PASSWORD,
10+
},
11+
});
12+
const message = {
13+
from: `${process.env.SMTP_FROM_NAME} <${process.env.SMTP_FROM_NAME}>`,
14+
to: options.email,
15+
subject: options.subject,
16+
text: options.message,
17+
};
18+
await transporter.sendMail(message);
19+
};
20+
21+
module.exports = sendEmail;

0 commit comments

Comments
 (0)