У Идентификатор подтверждения электронной почты пользователя от Почтальона - PullRequest
0 голосов
/ 11 апреля 2020

Я тестирую поток аутентификации / регистрации пользователей, в котором 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). Должен ли я как-то вернуть его при другом звонке только Почтальону? (не уверен, что это возможно)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...