Ссылка для подтверждения по электронной почте не работает в шаблоне HTML в nodejs - PullRequest
1 голос
/ 27 мая 2019

Я использую Nodemailer для отправки электронной почты (подтверждение, подтверждение и т. Д.).У меня есть почтовый запрос на регистрацию моих пользователей, затем я отправляю им ссылку для подтверждения по электронной почте с помощью токена.

Он хорошо работает с «текстовым» письмом.Но я попытался разработать HTML-шаблон.И ссылка не работает.

Моя пользовательская модель:

    //Email templating Register
let regtemplate = fs.readFileSync('views/email/regtemplate.handlebars', 'utf-8');
let compiledRegtemplate = hbs.compile(regtemplate);


// Register Form POST
router.post('/register', (req, res) => {
    let errors = [];
    if (errors.length > 0) {
        res.render('users/register', {
            errors: errors,
            name: req.body.name,
            email: req.body.email,
            password: req.body.password,
        });
    } else {
        User.findOne({ email: req.body.email })
            .then(user => {
                if (user) {
                    req.flash('error_msg', 'Cette adresse email est déjà enregistrée. Si c\'est la vôtre, connectez-vous.');
                    res.redirect('/register');
                } else {
                    const newUser = new User({
                        firstName: req.body.firstName,
                        lastName: req.body.lastName,
                        email: req.body.email,
                        password: req.body.password
                    });

                    bcrypt.genSalt(10, (err, salt) => {
                        bcrypt.hash(newUser.password, salt, (err, hash) => {
                            if (err) throw err;
                            newUser.password = hash;
                            newUser.save()
                                .then(user => {
                                    async.waterfall([
                                        function (done) {
                                            crypto.randomBytes(20, function (err, buf) {
                                                var token = buf.toString('hex');
                                                done(err, token);
                                            });
                                        },
                                        function (token, done) {
                                            user.resetPasswordToken = token;

                                            user.save(function (err) {
                                                done(err, token, user);
                                            });
                                        },
                                        function (token, user, done) {
                                            let transporter = nodemailer.createTransport({
                                                host: 'mail.gandi.net',
                                                port: 465,
                                                secure: true,
                                                auth: {
                                                    user: process.env.NM_USER,
                                                    pass: process.env.NM_PSW
                                                },
                                                tls: {
                                                    rejectUnauthorized: false
                                                }
                                            });

                                            let mailOptionsReset = {
                                                to: user.email,
                                                from: 'contact@collectorcarvalue.com',
                                                subject: 'Confirmez votre adresse email | Collector Car Value',
                                                html: compiledRegtemplate({ firstName: user.firstName, confirmlink: 'http://' + req.headers.host + '/confirmation/' + token + '\n\n'})
                                            };

                                            transporter.sendMail(mailOptionsReset, function (err) {
                                                req.flash('success_msg', 'Un lien de vérification a été envoyé à ' + user.email + '. Veuillez cliquez sur ce dernier s\'il vous plaît.');
                                                res.redirect('/register');
                                                done(err, 'done');
                                            });
                                        }
                                    ], function (err) {
                                        if (err) return next(err);
                                    });
                                })
                                .catch(err => {
                                    console.log(err);
                                    return;
                                });
                        });
                    });

                }
            });
    }
});

И моя ссылка href написана так в файле regtemplate.handlebars:

<a style="background-color:#ffa100;border:1px solid #333333;border-color:#ffa100;border-radius:6px;border-width:1px;color:#ffffff;display:inline-block;font-family:arial,helvetica,sans-serif;font-size:16px;font-weight:bold;letter-spacing:0.3px;line-height:25px;padding:12px 25px 12px 25px;text-align:center;text-decoration:none"
                                                                                            href={{confirmlink}}
                                                                                            target="_blank">Confirmez
                                                                                            votre adresse email</a>

Ссылка хорошо написана в моей строке chrome url, но перенаправление на мой локальный хост не работает.

...