Я тестирую поток аутентификации / регистрации пользователей, в котором Nodemailer генерирует электронное письмо (доступно через Ethereal ). В электронном письме есть ссылка с HTTP-параметром подтверждения, что при посещении маршрута активации с соответствующим идентификатором учетная запись включается.
function sendValidationEmail(activationId, userEmail) {
nodemailer.createTestAccount(() => {
// create reusable transporter object using the default SMTP transport
const transporter = nodemailer.createTransport({
host: 'smtp.ethereal.email',
port: 587,
auth: {
user: 'mqv23wg64gvpwgmf@ethereal.email',
pass: 'vzRdPkTdwNFxm6wBG1',
},
});
const receiverMail = env === 'development' ? 'crsej42ei5wvs3m2@ethereal.email' : userEmail;
// setup email data with unicode symbols
const mailOptions = {
from: '"Boilerplate Email Validation Service" <noreply@boilerplate.com>', // sender address
to: receiverMail, // list of receivers
subject: 'Validation', // Subject line
html: `<a href="${process.env.BASE_URI}auth/${activationId}">click this</a>`, // html body
};
// send mail with defined transport object
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
console.log('Message sent: %s', info.messageId);
// Preview only available when sending through an Ethereal account
console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info));
return true;
// Message sent: <b658f8ca-6296-ccf4-8306-87d57a0b4321@blurdybloop.com>
// Preview URL: https://ethereal.email/message/WaQKMgKddxQDoou...
});
});
}
, и эта часть проверяет это:
exports.verify = async (req, res, next) => {
try {
const user = await User.findOneAndUpdate({
activationId: req.params.activationId,
}, { active: true });
const token = generateTokenResponse(user, user.token());
user.tokens.push({ kind: 'jwt', token });
if (user) {
const userTransformed = user.transform();
return res.json(
{
token: user.tokens[0].token,
user: userTransformed,
},
);
}
return next();
} catch (err) {
return next(err);
}
};
Я хочу иметь возможность активировать учетную запись с почтальоном. (так что мне как-то нужно получить это activationId
). Должен ли я как-то вернуть его при другом звонке только Почтальону? (не уверен, что это возможно)